Mysql:DQL(Data Query Language - 資料查詢語言)
阿新 • • 發佈:2020-08-26
學習資料:
https://www.bilibili.com/video/BV1NJ411J79W?p=16
學習資料準備-執行下方sql語句或者下載sql檔案使用資料庫視覺化檔案匯入: 密碼: iv5w:
連結: https://pan.baidu.com/s/1oNJqc9BNY90oy-QishCBPg 密碼: iv5w
create database if not exists `school`; -- 建立一個school資料庫 use `school`;-- 建立學生表 drop table if exists `student`; create table `student`( `studentno` int(4) not null comment '學號', `loginpwd` varchar(20) default null, `studentname` varchar(20) default null comment '學生姓名', `sex` tinyint(1) default null comment '性別,0或1', `gradeid` int(11) default null comment '年級編號', `phone` varchar(50) not null comment '聯絡電話,允許為空', `address` varchar(255) not null comment '地址,允許為空', `borndate` datetime default null comment '出生時間', `email` varchar (50) not null comment '郵箱賬號允許為空', `identitycard` varchar(18) default null comment '身份證號', primary key (`studentno`), unique key `identitycard`(`identitycard`), key `email` (`email`) )engine=myisam default charset=utf8; -- 建立年級表 drop table if exists `grade`; create table `grade`( `gradeid` int(11) not null auto_increment comment '年級編號', `gradename` varchar(50) not null comment '年級名稱', primary key (`gradeid`) ) engine=innodb auto_increment = 6 default charset = utf8; -- 建立科目表 drop table if exists `subject`; create table `subject`( `subjectno`int(11) not null auto_increment comment '課程編號', `subjectname` varchar(50) default null comment '課程名稱', `classhour` int(4) default null comment '學時', `gradeid` int(4) default null comment '年級編號', primary key (`subjectno`) )engine = innodb auto_increment = 19 default charset = utf8; -- 建立成績表 drop table if exists `result`; create table `result`( `studentno` int(4) not null comment '學號', `subjectno` int(4) not null comment '課程編號', `examdate` datetime not null comment '考試日期', `studentresult` int (4) not null comment '考試成績', key `subjectno` (`subjectno`) )engine = innodb default charset = utf8; -- 插入學生資料 其餘自行新增 這裡只添加了2行 insert into `student` (`studentno`,`loginpwd`,`studentname`,`sex`,`gradeid`,`phone`,`address`,`borndate`,`email`,`identitycard`) values (1000,'123456','張偉',0,2,'13800001234','北京朝陽','1980-1-1','[email protected]','123456198001011234'), (1001,'123456','趙強',1,3,'13800002222','廣東深圳','1990-1-1','[email protected]','123456199001011233'); -- 插入成績資料 這裡僅插入了一組,其餘自行新增 insert into `result`(`studentno`,`subjectno`,`examdate`,`studentresult`) values (1000,1,'2013-11-11 16:00:00',85), (1000,2,'2013-11-12 16:00:00',70), (1000,3,'2013-11-11 09:00:00',68), (1000,4,'2013-11-13 16:00:00',98), (1000,5,'2013-11-14 16:00:00',58); -- 插入年級資料 insert into `grade` (`gradeid`,`gradename`) values(1,'大一'),(2,'大二'),(3,'大三'),(4,'大四'),(5,'預科班'); -- 插入科目資料 insert into `subject`(`subjectno`,`subjectname`,`classhour`,`gradeid`)values (1,'高等數學-1',110,1), (2,'高等數學-2',110,2), (3,'高等數學-3',100,3), (4,'高等數學-4',130,4), (5,'C語言-1',110,1), (6,'C語言-2',110,2), (7,'C語言-3',100,3), (8,'C語言-4',130,4), (9,'Java程式設計-1',110,1), (10,'Java程式設計-2',110,2), (11,'Java程式設計-3',100,3), (12,'Java程式設計-4',130,4), (13,'資料庫結構-1',110,1), (14,'資料庫結構-2',110,2), (15,'資料庫結構-3',100,3), (16,'資料庫結構-4',130,4), (17,'C#基礎',130,1);
常用查詢語句:
-- DQL -- 1. 查詢全部學生 select * from student; -- 2. 查詢全部學生的姓名,電話 SELECT `studentname`, `phone` FROM student; -- 3. 別名的使用 SELECT s.studentname FROM student AS s; -- 4. concat 函式 SELECT CONCAT('姓名:',`studentname`) FROM student; -- 5. 去重查詢 SELECT DISTINCT `studentNo` FROM result; -- 6. 查詢系統版本 SELECT VERSION(); -- 7. 計算表示式 SELECT 100%3 AS `表示式結果`; -- 8. 查詢自增長的步長 SELECT @@auto_increment_increment; -- 9. 學員考試成績 加分後結果 SELECT `studentNo`,`studentResult` + 1 AS '➕分後' FROM result; -- 10. 查詢成績在 95~100之間的資料 SELECT * FROM result WHERE `studentResult` BETWEEN 95 AND 100; SELECT * FROM result WHERE `studentResult`>=95 AND `studentResult`<=100; SELECT * FROM result WHERE `studentResult` IN (95,96,97,98,99,100); -- 11. 模糊查詢,姓張的同學 SELECT * FROM student WHERE studentname LIKE '張%'; -- 12. 檢視地址為空的 SELECT * FROM student WHERE address IS NULL; -- 13. 分頁查詢 , 從第3條資料開始,查3條資料出來 SELECT * FROM result LIMIT 2,3; -- 14. 排序查詢 DESC 倒序 SELECT * FROM result ORDER BY `studentResult` DESC; -- 15. 分組 SELECT * FROM result GROUP BY `studentNo`; -- 16. 連表查詢-內連線 : 如果表中至少有一個匹配,就返回行. on 連線表 , where 條件 SELECT s.studentNo, studentName, `subjectNO`,StudentResult FROM student AS s join result as r where s.studentno = r.studentno; -- 17. 右連結 : 會從右表中返回所有的值,即使左表中沒有匹配 student為右表 SELECT s.studentNo, studentName, `subjectNO`,StudentResult FROM student AS s RIGHT JOIN result as r ON s.studentno = r.studentno; -- 18. 左連結 :會從左表中返回所有的值,即使右表中沒有匹配。 student 為左表 SELECT s.studentNo, studentName, `subjectNO`,StudentResult FROM student AS s LEFT JOIN result as r ON s.studentno = r.studentno; -- 19. 自連線 拆成兩張表 SELECT a.categoryName AS '一級分類', b.categoryName AS '二級分類' FROM `category` AS a, `category` AS b WHERE a.categoryName = b.categoryName; -- 20. 聚合函式 :max min sum avg SELECT MAX(`studentResult`) FROM result; -- 21. 子查詢 SELECT * FROM result WHERE studentNo IN ( SELECT `subjectNo` FROM `subject` ); -- 常用函式;獲取當前時間 SELECT NOW();