MySQL

MySQL

langsamUndStetig 2022. 5. 26. 17:39
CREATE DATABASE record_company;

      USE record_company;
      CREATE TABLE bands (
      id INT NOT NULL AUTO_INCREMENT,
      name VARCHAR(255) NOT NULL,
      PRIMARY KEY (id)
      );
      CREATE TABLE albums (
      id INT NOT NULL AUTO_INCREMENT,
      name VARCHAR(255) NOT NULL,
      release_year INT,
      band_id INT NOT NULL,
      PRIMARY KEY (id),
      FOREIGN KEY (band_id) REFERENCES bands(id)
      );

      INSERT INTO bands (name)
      VALUES ('Iron Maiden');

      INSERT INTO bands (name)
      VALUES ('Deuce'), ('Avenged Seveidnfold'), ('Ankor');

      SELECT * FROM bands;


      SELECT name FROM bands;

      SELECT
      id AS 'ID', name AS 'Band Name'
      FROM
      bands;
       
      SELECT * FROM bands ORDER BY name ;

      INSERT INTO albums (name, release_year, band_id)
      VALUES ('The Number of the Beast', 1985, 1),
      ('Power Slave', 1984, 1),
      ('Nightmare', 2018, 2),
      ('Nightmare', 2010, 3),
      ('Test Album', Null, 3);

      SELECT * FROM albums;
	  
      SELECT DISTINCT name FROM albums;
      /*DISTINCT 는 중복된 name은 가져오지 않는다. 즉 중복되어 있으면 1개만 나옴*/
      
      UPDATE albums
      SET release_year = 1982
      WHERE id = 1;
      /*id가 1인 행의 releas_year를 1982로 업데이트  */

      SELECT * FROM albums
      WHERE release_year < 2000;
      /* release_year가 2000 미만인 행을 다 가져옴 */

      SELECT * FROM albums
      WHERE name LIKE '%er%'OR band_id =2;
      /*-er-이 name에 있거나, band_id가 2인 행 소환 */

      SELECT * FROM albums
      WHERE release_year = 1984 AND band_id = 1;
      /*release_year가 1984이고, band_id가 1. */

      SELECT * FROM albums
      WHERE release_year BETWEEN 2000 AND 2018;
      /*release_year가 2000과 2018 사이 (2000, 2018 모두 포함) */

      SELECT * FROM albums
      WHERE release_year IS NULL;
      /*release_year가 null인 경우만 소환 */

      DELETE FROM albums WHERE id = 5;
      /*id 5 삭제 */

      SELECT * FROM albums;


      SELECT * FROM bands
      JOIN albums ON bands.id = albums.band_id;
      /*albums에는 bands의 id열을 reference한 band_id 열이 FOREIGN KEY로 존재*/
      /*서로 다른 테이블이 동시에 갖고 있는 값을 관계시켜줌 */

      SELECT * FROM albums
      LEFT JOIN bands ON bands.id = albums.band_id;
      /*albums를 왼쪽에 다 깔아둔 후, bands와 연결, 그래서 bands에 값이 없더라도 왼쪽에 albums에선 등장 */
      
      SELECT * FROM albums
	  RIGHT JOIN bands ON bands.id = albums.band_id;
      /*albums는 왼쪽에 위치하고, 오른쪽에 위치한 bands는 모두 등장, albums에 null 값이 있어도. */
	  
      SELECT SUM(release_year) FROM albums;
      /*albums release_year 전체 더하기 */
      
      SELECT band_id, COUNT(band_id) From albums
      GROUP BY band_id;
      /* band_id를 그룹별로 나누어서, 나온 수 만큼 더해서 그다음 열에 COUNT(band_id) 값을 줌 */


      SELECT b.name AS band_name, COUNT(a.id) AS num_albums
      /*b.name 열의 이름을 band_name으로 나타나게, COUNT도 마찬가지 */
      FROM bands AS b
      /*bands를 b로 사용 */
      LEFT JOIN albums AS a ON b.id =  a.band_id
      GROUP BY b.id
      /*WHERE는 GROUP BY 뒤에선 사용할 수 없음, 대신 HAVING 사용 가능. */
      HAVING num_albums = 1;

SQL은 테이블을 보는 재미가 있어서 배울 때 더 재밌는 거 같다. 

내일부턴 연습문제를 풀면서 공부해야겠다.