知了堂學習筆記-SQL簡單查詢
CREATE DATABASE 工廠; CREATE TABLE 車間( 車間號 INT PRIMARY KEY, 車間主任名稱 NCHAR(10), 地址 NCHAR(10), 電話 INT ); CREATE TABLE 工人( 職工號 INT PRIMARY KEY, 姓名 NCHAR(10), 年齡 INT, 性別 NCHAR(10), 工種 NCHAR(10), 車間號 INT, FOREIGN KEY (車間號) REFERENCES 車間(車間號) ); CREATE TABLE 倉庫( 倉庫號 INT PRIMARY KEY, 倉庫主任姓名NCHAR(10), 電話 INT ); CREATE TABLE 工廠( 廠名 CHAR PRIMARY KEY, 廠長名 NCHAR(10), 車間號 INT, FOREIGN KEY (車間號) REFERENCES 車間(車間號) ); DROP TABLE 產品 DROP TABLE 產品_倉庫; DROP TABLE 產品_零件 CREATE TABLE 產品( 產品號 INT PRIMARY KEY, 價格 INT, 車間號 INT, CONSTRAINT fk_child FOREIGN KEY (車間號) REFERENCES 車間(車間號) );CREATE TABLE 零件( 零件號 INT PRIMARY KEY, 重量 INT, 價格 INT ); CREATE TABLE 車間_零件( 車間號 INT, 零件號 INT, PRIMARY KEY (車間號,零件號), FOREIGN KEY (車間號) REFERENCES 車間(車間號), FOREIGN KEY (零件號) REFERENCES 零件(零件號) ); CREATE TABLE 產品_零件( 產品號 INT, 零件號 INT, PRIMARY KEY (產品號,零件號), FOREIGN KEY (產品號) REFERENCES產品(產品號), FOREIGN KEY (零件號) REFERENCES 零件(零件號) ); CREATE TABLE 產品_倉庫( 產品號 INT, 倉庫號 INT, PRIMARY KEY (產品號,倉庫號), FOREIGN KEY (產品號) REFERENCES 產品(產品號), FOREIGN KEY (倉庫號) REFERENCES 倉庫(倉庫號) ); -- 添加數據 INSERT INTO 工廠 VALUES(‘廠‘,‘廠長‘,125); INSERT INTO 工廠 VALUES(‘港‘,‘港長‘,125); INSERT INTO 車間 VALUES(125,‘李四‘,‘百草路‘,1546789); INSERT INTO 工人 VALUES(1,‘張三‘,20,‘男‘,‘搬運‘,125); INSERT INTO 倉庫 VALUES(12,‘王五‘,1579); INSERT INTO 產品 VALUES(153,487,125); INSERT INTO 零件 VALUES(151,15,20); INSERT INTO 產品_倉庫 VALUES(153,12); INSERT INTO 產品_零件 VALUES(153,151); INSERT INTO 車間_零件 VALUES(125,151); -- 查詢 SELECT * FROM 工廠; DELETE FROM 工廠 WHERE 廠名 = ‘港‘; SELECT * FROM 工廠; -- 復制數據和表結構 CREATE TABLE 工廠_1 SELECT * FROM 工廠; -- 復制表結構 CREATE TABLE 工廠_2 SELECT * FROM 工廠 WHERE 1 = 2; -- 復制數據到相同結構的表 INSERT INTO 工廠_2 SELECT * FROM 工廠; -- 添加列 ALTER TABLE 工人 ADD 住址 VARCHAR(100) DEFAULT ‘成都‘; -- DATE精確到日 ALTER TABLE 工人 ADD 入職時間 DATE; -- 修改指定列數據 UPDATE 工人 SET 入職時間=‘2018-4-1‘ WHERE 職工號=‘1‘; ALTER TABLE 工人 DROP COLUMN 入職時間; ALTER TABLE 工人 ADD 入職時間 DATETIME; UPDATE 工人 SET 入職時間=‘2018-03-19 19:53:54‘ WHERE 職工號=‘1‘; ALTER TABLE 工人 DROP COLUMN 入職時間; ALTER TABLE 工人 ADD 入職時間 TIMESTAMP;-- 默認當前時間 ALTER TABLE 工人 CHANGE 入職時間 時間 TIMESTAMP; -- 建標end -- 2018/3/24 SQL查詢語句 ALTER TABLE 工廠 ADD 工廠編號 INT ; ALTER TABLE 工廠 DROP COLUMN 工廠編號; -- 模糊查詢 like ‘%‘ 多個 ‘_‘單個 SELECT * FROM 工廠 WHERE 廠長名 LIKE ‘劉%‘; SELECT * FROM 工廠 WHERE 工廠編號 >101 AND 工廠編號 <109; -- limit a,b 查詢 第a之後b行的信息 SELECT * FROM 工廠 LIMIT 2,3; ALTER TABLE 倉庫 ADD 廠名 CHAR; ALTER TABLE 倉庫 ADD FOREIGN KEY (廠名) REFERENCES 工廠(廠名); SELECT 倉庫號 FROM 倉庫 WHERE 廠名 =‘成‘; -- 成都工廠下面有哪些工人 多表查詢 SELECT * FROM 工廠 a, 工人 b WHERE a.`廠名`=‘成‘ AND a.`車間號`=b.`車間號`; SELECT * FROM 產品 b, 車間 a WHERE a.`地址`=‘成都‘ AND a.`車間號`=b.`車間號`; -- 2018/3/25 05_函數 -- 查找姓名為3個字的工人 SELECT * FROM 工人 WHERE CHAR_LENGTH(姓名)=3; -- 查詢員工男女個數 用group by 分組 SELECT COUNT(*),性別,COUNT(*) FROM 工人 GROUP BY 性別; -- 查詢車間主任的電話號碼,但是電話號碼的後4位用×隱藏 -- replace ()用於替換指定字符 SELECT 車間主任名稱,REPLACE(電話,RIGHT(電話,4),‘XXXX‘) FROM 車間; -- 查詢車間主任的電話號碼,但是電話號碼的中間4位用×隱藏 -- substring(str,pos,len):返回字符串str的位置pos起len個字符 SELECT 車間主任名稱,REPLACE(電話,SUBSTRING(電話,2,4),‘XXXX‘) FROM 車間; -- SELECT DATEDIFF(SYSDATE(), ‘2018-01-01‘) 查詢時間差 SELECT 時間,DATEDIFF(SYSDATE(), 時間) FROM 工人; -- 查詢員工中男女生平均年齡 AVG求平均數 SELECT 性別 ,AVG(年齡) FROM 工人 GROUP BY 性別; -- 【擴展能力】查詢各個車間對應男生和女生個數分別是多少。 SELECT 車間號,COUNT(性別),性別 FROM 工人 GROUP BY 車間號,性別;
基本SQL查詢
創建數據庫 CREATE DATABASE 工廠;
創建表 CREATAE TABLE 車間( );
刪除表 DROP TABLE 車間;
建表同時加入數據類型 CREATE TABLE 車間(車間號 INT PRIMARY KEY,電話 INT);
建表後插入數據類型 ALTER TABLE 車間 ADD 車間名 VARCHAR(100);
建表後插入數據 INSERT INTO 車間 VALUES(1,159937564,‘檸檬仔’); 或 INSERT INTO 車間 (電話, 車間號, 車間名) VALUES (159937564,1,‘檸檬仔’);
刪除表中數據 DELETE FROM 車間 WHERE 車間名=‘檸檬仔‘;
查詢數據 SELECT * FROM 車間;
基本約束
建表的同時添加約束:
CREATE TABLE 車間(
車間號 INT PRIMARY KEY,
地址 VARCHAR(10)
);
CREATE TABLE 工人(
工人編號 INT PRIMARY KEY,
所屬車間號 INT FOREIGN KEY (所屬車間號) REFERENCES 車間(車間號); -- 建立外鍵約束 系統自動分配關系名
-- 或 所屬車間號 INT CONSTRAINT 工人_車間 FOREIGN KEY (所屬車間) REFERENCES 車間(車間號); 指定關系名為工人_車間
);
創建表後添加約束:
CREATE TABLE 車間(
車間號 INT PRIMARY KEY,
地址 VARCHAR(10)
);
CREATE TABLE 工人(
工人編號 INT,
所屬車間號 INT
);
ALTER TABLE 車間 ALTER 地址 SET DEFAULT ‘檸檬仔’;
ALTER TABLE 車間 ADD CHECK(車間號>0);
ALTER TABLE 工人 ADD FOREIGN KEY (所屬車間號) REFERENCES 車間(車間號);
ALTER TABLE 工人 ADD PRIMARY KEY 工人編號;
ALTER TABLE 工人 ADD UNIQUE (所屬車間編號);
非空約束 NOT NULL
默認約束 DEFAULT XX
唯一約束 UNIQUE
值範圍 CHECK (XX)
連接、嵌套查詢
CREATE DATABASE 連接; CREATE TABLE 車間( 車間號 CHAR PRIMARY KEY, 車間地址 VARCHAR(20) NOT NULL ); CREATE TABLE 工人( 工人號 INT PRIMARY KEY, 車間號 CHAR, 電話 INT ); DROP TABLE 車間; DROP TABLE 工人; -- 向車間添加數據 INSERT INTO 車間 VALUES(‘A‘,‘成都‘); INSERT INTO 車間 VALUES(‘B‘,‘廣州‘); INSERT INTO 車間 VALUES(‘C‘,‘鄭州‘); INSERT INTO 車間 VALUES(‘D‘,‘廈門‘); INSERT INTO 車間 VALUES(‘G‘,‘福建‘); -- 向工人添加數據 INSERT INTO 工人 VALUES(1,‘A‘,156789555); INSERT INTO 工人 VALUES(2,‘B‘,123456789); INSERT INTO 工人 VALUES(3,‘C‘,456789456); INSERT INTO 工人 VALUES(5,‘C‘,123456789); INSERT INTO 工人 VALUES(6,‘D‘,123456784); INSERT INTO 工人 VALUES(4,‘F‘,456789123); -- 多表查詢 工人車間的地址 SELECT a.`工人號` ,b.`車間地址` FROM 工人 a, 車間 b WHERE a.`車間號`=b.`車間號`; -- 左連 以工人為基表 工人表中工人號為4的車間不存在,查詢結果為車間地址不存在 SELECT 工人.`工人號`, 車間.`車間地址` FROM 工人 LEFT JOIN 車間 ON 工人.`車間號`=車間.`車間號`; -- 右連 以車間為基表 車間表中不存在F車間,查詢結果忽略不合法的工人號4 SELECT 工人.`工人號`, 車間.`車間地址` FROM 工人 RIGHT JOIN 車間 ON 工人.`車間號`=車間.`車間號`; -- INNER JOIN查詢 取交集 SELECT 工人.`工人號`, 車間.`車間地址` FROM 工人 INNER JOIN 車間 ON 工人.`車間號`=車間.`車間號`; -- FULL MySQL中不支持這種查詢 SELECT 工人.`工人號`, 車間.`車間地址` FROM 工人 FULL JOIN 車間 ON 工人.`車間號`=車間.`車間號`; -- 查找每個廠員工總數 SELECT 工人. FROM 工人 RIGHT JOIN 車間 ON 工人.; -- 查詢車間工人總數 嵌套查詢 首先執行‘()’裏面的代碼講查詢出的結果(需要的信息)放到名為‘c’的虛表裏 然後在虛表‘c’裏面做查詢 SELECT 車間地址, COUNT(工人號) FROM (SELECT 車間地址 , 工人號 FROM 工人 a RIGHT JOIN 車間 b ON a.`車間號`=b.`車間號`) AS c GROUP BY 車間地址; -- 查詢工人數大於2的車間 SELECT 車間地址, COUNT(工人號) FROM (SELECT 車間地址 , 工人號 FROM 工人 a RIGHT JOIN 車間 b ON a.`車間號`=b.`車間號`) AS c GROUP BY 車間地址 HAVING COUNT(工人號)>=2; -- 總結 連接查詢可以去除掉不合法的信息,對於需要大範圍合法性比較比WHERE簡便. 可以看為集合問題.
-- 嵌套查詢先將查詢出的有用數據放在一個虛表中然後利用多表查詢 解決單表問題
歡迎指錯 2018-04-09
知了堂學習筆記-SQL簡單查詢