SQL Classic 연습: 컴퓨터 저장소

테이블 구조

이 문서에서 사용된 테이블 구조는 다음과 같습니다.

스크린샷 2023-03-02 오후 5.27.32.png

다음은 테이블을 생성하는 명령문입니다.

-- 厂商表
CREATE TABLE Manufacturers (
  Code INTEGER NOT NULL PRIMARY KEY, -- 编号,主键
  Name VARCHAR(255) NOT NULL, -- 名称
);

-- 产品表
CREATE TABLE Products (
  Code INTEGER NOT NULL PRIMARY KEY, -- 编号,主键
  Name VARCHAR(255) NOT NULL, -- 名称
  Price DECIMAL NOT NULL, -- 价格
  Manufacturer INTEGER NOT NULL, -- 厂商编号
  FOREIGN KEY (Manufacturer) REFERENCES Manufacturers(Code) -- 外键,引用厂商表
);

-- 测试数据
INSERT INTO Manufacturers(Code,Name) 
VALUES (1,'Sony'),
       (2,'Creative Labs'),
       (3,'Hewlett-Packard'),
       (4,'Iomega'),
       (5,'Fujitsu'),
       (6,'Winchester');

INSERT INTO Products(Code,Name,Price,Manufacturer) 
VALUES (1,'Hard drive',240,5),
       (2,'Memory',120,6),
       (3,'ZIP drive',150,4),
       (4,'Floppy disk',5,6),
       (5,'Monitor',240,1),
       (6,'DVD drive',180,2),
       (7,'CD drive',90,2),
       (8,'Printer',270,3),
       (9,'Toner cartridge',66,3),
       (10,'DVD burner',180,2);

연습 문제

모든 제품 이름 보기

SELECT Name FROM Products;

모든 제품 이름 및 가격 보기

SELECT Name, Price FROM Products;

가격이 200 이하인 제품 이름 보기

SELECT Name FROM Products WHERE Price <= 200;

가격이 60~120 사이인 제품을 확인하세요.

/* 使用 AND 运算符*/
SELECT * FROM Products
WHERE Price >= 60 AND Price <= 120;

/* 使用 BETWEEN 运算符*/
SELECT * FROM Products
WHERE Price BETWEEN 60 AND 120;

모든 제품의 이름과 가격을 확인하고 가격은 센트 단위로 표시됩니다.

SELECT Name, Price * 100 AS PriceCents FROM Products;

모든 제품의 평균 가격 계산

SELECT AVG(Price) FROM Products;

공급업체 번호가 2인 모든 제품의 평균 가격을 계산합니다.

SELECT AVG(Price) FROM Products WHERE Manufacturer=2;

가격이 180보다 크거나 같은 제품의 수를 센다.

SELECT COUNT(*) FROM Products WHERE Price >= 180;

가격이 180 이상인 제품 이름 및 가격 보기, 가격 내림차순, 이름 오름차순 정렬

SELECT Name, Price 
FROM Products
WHERE Price >= 180
ORDER BY Price DESC, Name;

모든 제품 및 제조업체 정보 보기

SELECT * FROM Products, Manufacturers
WHERE Products.Manufacturer = Manufacturers.Code;

모든 제품 이름, 가격 및 제조업체 이름 보기

SELECT Products.Name, Price, Manufacturers.Name
FROM Products 
JOIN Manufacturers
ON Products.Manufacturer = Manufacturers.Code;

각 제조업체의 평균 제품 가격을 계산하고 제조업체 번호를 표시합니다.

SELECT AVG(Price), Manufacturer
FROM Products
GROUP BY Manufacturer;

각 제조업체의 평균 제품 가격을 세고 제조업체 이름을 표시합니다.

SELECT AVG(Price), Manufacturers.Name
FROM Products 
JOIN Manufacturers
ON Products.Manufacturer = Manufacturers.Code
GROUP BY Manufacturers.Name;

평균 제품 가격이 150보다 크거나 같은 제조업체 이름 보기

SELECT AVG(Price), Manufacturers.Name
FROM Products 
JOIN Manufacturers
ON Products.Manufacturer = Manufacturers.Code
GROUP BY Manufacturers.Name
HAVING AVG(Price) >= 150;

가장 저렴한 제품명과 가격을 확인하세요

SELECT Name, Price
FROM Products
ORDER BY price ASC
LIMIT 1;

/* 如果存在多个最便宜的产品,嵌套子查询可以返回多条记录 */
SELECT Name, Price
FROM Products
WHERE Price = (SELECT MIN(Price) FROM Products);

각 공급업체와 가장 비싼 제품 이름 및 가격 보기

SELECT A.Name, A.Price, F.Name
FROM Products A 
JOIN Manufacturers F
ON A.Manufacturer = F.Code
AND A.Price =
     (
       SELECT MAX(A.Price)
       FROM Products A
       WHERE A.Manufacturer = F.Code
     );

평균 제품 가격이 145보다 큰 제조업체의 이름을 보고 최소 2개의 제품을 생산하십시오.

SELECT m.Name, Avg(p.price) AS p_price, COUNT(p.Manufacturer) AS m_count
FROM Manufacturers m, Products p
WHERE p.Manufacturer = m.code
GROUP BY m.Name
HAVING Avg(p.price) >= 150 AND COUNT(p.Manufacturer) >= 2;

새 제품 추가

새 제품의 정보는 다음과 같습니다. 이름은 확성기, 가격은 70, 제조업체 번호는 2입니다.

INSERT INTO Products( Code, Name , Price , Manufacturer)
  VALUES ( 11, 'Loudspeakers' , 70 , 2 );

제품 번호 8을 "레이저 프린터"로 변경

UPDATE Products
SET Name = 'Laser Printer'
WHERE Code = 8;

모든 제품 10% 할인

UPDATE Products
SET Price = Price - (Price * 0.1);

120불 이상 제품 10% 할인

UPDATE Products
SET Price = Price - (Price * 0.1)
WHERE Price >= 120;

 

추천

출처blog.csdn.net/GUDUzhongliang/article/details/131955611