-- 查詢語句
SELECT * FROM student; -- 效率略低,一般不建議使用
SELECT tid,tname FROM student;
SELECT tname AS 姓名 FROM student;
SELECT * FROM student WHERE 1=1;
SELECT tname FROM student; -- 指定查詢個別列
SELECT USER,PASSWORD,HOST FROM mysql.user; -- 跨庫查詢mysql數據庫的user表內的用戶名、密碼、主機
-- 創建學生信息表
CREATE TABLE stu(
sno INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(10) NOT NULL,
sgender ENUM('男','女') DEFAULT '男',
saddress VARCHAR(50),
sscore TINYINT UNSIGNED,
sdept VARCHAR(20) NOT NULL
)ENGINE=MYISAM AUTO_INCREMENT=2014270001 DEFAULT CHARSET=utf8;
INSERT INTO stu VALUES(NULL,'董華','男','河南省鄭州市',80,'計算機網絡');
INSERT INTO stu VALUES(NULL,'代珂','男','河南省平頂山',85,'計算機安全');
INSERT INTO stu VALUES(NULL,'小江','男','河南省商丘',70,'計算機網絡');
INSERT INTO stu VALUES(NULL,'小賓','男','河南省商丘市',80,'計算機安全');
INSERT INTO stu VALUES(NULL,'小麗','女','河南省安陽市',90,'化工食品');
INSERT INTO stu VALUES(NULL,'小華','男','北京市',48,'化工食品');
INSERT INTO stu VALUES(NULL,'凱利','女','上海市',74,'生物工程');
INSERT INTO stu VALUES(NULL,'王菲','女','上海市',81,'生物工程');
INSERT INTO stu VALUES(NULL,'麗薩','女','河北省天津市',59,'生物工程');
INSERT INTO stu VALUES(NULL,'李莉','女','河北省天津市',0,'化工食品');
INSERT INTO stu VALUES(NULL,'張闖','男','河北省天津市',NULL,'計算機網絡');
INSERT INTO stu VALUES(NULL,'張秋千','男','安徽省合肥市',NULL,'計算機安全');
INSERT INTO stu VALUES(NULL,'張李秋','男','安徽省',67,'建築工程');
INSERT INTO stu VALUES(NULL,'秋香',NULL,'安徽省',95,'建築工程');
-- 條件查詢
-- 空條件判斷 IS NULL 或 IS NOT NULL
SELECT * FROM stu WHERE sscore IS NULL;
SELECT sno,sname,sscore FROM stu WHERE sscore IS NOT NULL;
-- IN() 在...範圍內 或 NOT IN()不在...範圍內
SELECT * FROM stu WHERE sdept IN('計算機網絡','計算機安全');
SELECT * FROM stu WHERE sdept NOT IN('計算機網絡','計算機安全');
-- BETWEEN AND 在...之間 或 NOT BETWEEN AND 不在...之間
SELECT * FROM stu WHERE sscore NOT BETWEEN 70 AND 90;
SELECT * FROM stu WHERE sscore BETWEEN 70 AND 90;
-- NOT 取反運算符 ADN 與運算符 OR 或運算符
SELECT * FROM stu WHERE sdept = '建築工程' OR sdept = '生物工程';
SELECT * FROM stu WHERE sgender = '男' AND sdept = '計算機網絡';
-- LIKE '張%' 模糊查找運算符(%:代表0-n多個字符,_代表一個字符)
SELECT * FROM stu WHERE sname LIKE '李%';
SELECT * FROM stu WHERE sname LIKE '李_';
SELECT * FROM stu WHERE sname LIKE '%李%';
SELECT * FROM stu WHERE sname NOT LIKE '%李%';
-- 排序操作 DESC代表降序排序,ASC代表升序排序,默認升序排序
SELECT * FROM stu ORDER BY sscore DESC;
SELECT * FROM stu ORDER BY sscore ASC;
-- LIMIT 限制結果顯示行數(用法:LIMIT 5 顯示5行 或 LIMIT 0,5 從0位置開始顯示5行,0代表數據庫內起始行數),LIMIT 在SQL語句最後面
SELECT * FROM stu LIMIT 5;
SELECT * FROM stu LIMIT 0,5;
-- IFNULL() 與 IF()兩個函數的使用及區別:IFNULL(exp1,exp2) = IF(exp1 IS NULL,exp2,exp3)
SELECT sno AS 學號,sname AS 姓名,sgender AS 性別,IFNULL(sscore,'曠考') AS 成績 FROM stu;
SELECT sno AS 學號,sname AS 姓名,sgender AS 性別,IF(sscore IS NULL,'曠考',sscore) AS 成績 FROM stu;
-- 集合函數(聚集函數)
AVG() -- 求平均值 (計算平均時,不包含空值)
SUM() -- 求和
COUNT() -- 求總記錄數
MAX() -- 最大值
MIN() -- 最小值
SELECT AVG(sscore) 平均分,SUM(sscore) 總分,MAX(sscore) 最高分,MIN(sscore) 最低分,COUNT(*) 總人數,COUNT(sscore) 考試人數 FROM stu;
SELECT COUNT(DISTINCT sdept) 專業 FROM stu; -- DISTINCT 去除重複
SELECT sdept,AVG(sscore) FROM stu GROUP BY sdept; -- 分組查詢,一般前面是分組名稱,緊跟着是集合函數(聚集函數)
-- 條件中的那個查詢是子查詢,顯示出最高分的學生信息
SELECT * FROM stu WHERE sscore =(
SELECT MAX(sscore) FROM stu -- 子查詢,當子查詢查到的數據只有一個時,可以用'=',多於一條時只能用'IN'
);
SELECT * FROM stu WHERE sscore IN(
SELECT MAX(sscore) FROM stu -- 子查詢
);
-- 統計男、女生分別有幾人
SELECT IFNULL(sgender,'保密'),COUNT(*) FROM stu GROUP BY sgender;
-- 統計各個專業的平均成績,顯示平均成績不小於60分的專業的前兩條數據
SELECT sdept,AVG(sscore) FROM stu WHERE 1=1 GROUP BY sdept HAVING AVG(sscore)>=60 ORDER BY AVG(sscore) DESC LIMIT 2;
WHERE 查詢條件
GROUP BY 分組
HAVING 是分組條件(使用前提是使用了分組)
ORDER BY 排序
LIMIT 取幾條記錄
-- 多表連接查詢 查詢結果是多個表中的信息
CREATE TABLE student(
sid INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(10) NOT NULL,
sage TINYINT UNSIGNED,
stid SMALLINT UNSIGNED
)ENGINE=MYISAM DEFAULT CHARSET=utf8;
CREATE TABLE teacher(
tid SMALLINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
tname VARCHAR(10) NOT NULL
)ENGINE=MYISAM DEFAULT CHARSET=utf8;
INSERT INTO teacher VALUES(NULL,'張老師');
INSERT INTO teacher VALUES(NULL,'王老師');
INSERT INTO teacher VALUES(NULL,'趙老師');
INSERT INTO teacher VALUES(NULL,'李老師');
SELECT * FROM teacher;
INSERT INTO student VALUES(NULL,'曹操',20,1);
INSERT INTO student VALUES(NULL,'張飛',27,4);
INSERT INTO student VALUES(NULL,'關羽',29,2);
INSERT INTO student VALUES(NULL,'劉備',50,2);
INSERT INTO student VALUES(NULL,'孫權',40,4);
INSERT INTO student VALUES(NULL,'諸葛亮',24,3);
INSERT INTO student VALUES(NULL,'姚蓋',25,1);
INSERT INTO student VALUES(NULL,'大喬',25,5);
SELECT * FROM student;
TRUNCATE student;
-- 查詢學生學號、姓名、年齡及代課老師的姓名:
-- 等值鏈接查詢
SELECT sid,sname,sage,tname FROM student,teacher WHERE student.stid=teacher.tid;
-- 左鏈接查詢
SELECT sid,sname,sage,IFNULL(tname,'無') FROM student s LEFT JOIN teacher t ON s.stid=t.tid;
-- 右鏈接查詢
SELECT sid,sname,sage,IFNULL(tname,'無') FROM student s RIGHT JOIN teacher t ON s.stid=t.tid;
-- 表的自身鏈接查詢
SELECT a.sid,a.sname,b.sname FROM student a,student b WHERE a.sid<b.sid;
-- INSERT 插入語句
CREATE TABLE t1(
tid INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
tname VARCHAR(10) NOT NULL,
tage TINYINT UNSIGNED
)ENGINE=MYISAM DEFAULT CHARSET=utf8;
INSERT INTO t1 VALUES(NULL,'jack',18); -- 插入一條數據
INSERT INTO t1 VALUES(NULL,'jane',20),(NULL,'lili',10); -- 插入多條數據
INSERT INTO t1 (tname,tage) VALUES('張三',20); -- 插入一條數據,字段對應
INSERT INTO t1 SELECT * FROM t1; -- 將查詢的數據插入數據庫(前提是沒有主鍵約束)
REPLACE INTO t1 VALUES(1,'庫克',35); -- 如果主鍵相同則替換插入,不同則插入
-- DELETE 刪除語句
DELETE FROM t1 WHERE tid=1; -- 刪除t1表內tid爲1的數據
DELETE FROM t1; -- 刪除t1表內的所有數據(再次插入數據,主鍵接着之前的增加)
TRUNCATE t1; -- 截斷表內的所有數據,清空數據,保留結構(再次插入數據的話,主鍵重新開始),不觸發觸發器
-- drop 刪除語句
DROP DATABASE db;-- 刪除數據庫
DROP TABLE t1;-- 刪除表
-- UPDATE 更新修改語句
UPDATE t1 SET tname = '小可',tage=18 WHERE tid =2;