1. 程式人生 > >知了堂學習筆記-SQL簡單查詢

知了堂學習筆記-SQL簡單查詢

模糊查詢 sql 編號 唯一約束 date() create 哪些 not null 成都

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簡單查詢