mysql-增刪改查操作

-- 查詢語句

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;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章