테이블 구조
이 문서에서 사용된 테이블 구조는 다음과 같습니다.
다음은 테이블을 생성하는 명령문입니다.
-- 厂商表
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;