mysql20170410练习代码+笔记
生活随笔
收集整理的這篇文章主要介紹了
mysql20170410练习代码+笔记
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
今天的幾道高級sql查詢真的挺難的,感覺好像視頻里講過,當(dāng)時也沒有練,已經(jīng)淡化了很多,sql還是要多練習(xí)啊!確實邏輯性挺強(qiáng)的。
?
?
SELECT studentResult,studentNO FROM result WHERE result.`subjectNo`=(SELECT subjectNo FROM `subject`)SELECT studentResult FROM result WHERE result.subjectNo = (SELECT subjectNo FROM SUBJECT WHERE subjectName='java') WHERE NOT EXISTS(SELECT studentResult FROM result<60) AND (SELECT (AVG(studentResult)+5) FROM result)SELECT studentResult FROM result WHERE result.subjectNo = (SELECT subjectNo FROM SUBJECT WHERE subjectName='java')>=60SELECT subjectNo FROM `subject` WHERE subjectName = 's1'SELECT subjectNo FROM `subject` WHERE subjectName = 's2'WHERE EXISTS(SELECT subjectNo FROM `subject` WHERE subjectName = 's1' ) AND SELECT studentNo 學(xué)號,subjectNo 科目編號,studentResult 學(xué)員成績,examDate 考試時間 FROM result WHERE subjectNO =(SELECT subjectNo FROM `subject` WHERE subjectName = 's2' )SELECT studentNo 學(xué)號, studentResult 分?jǐn)?shù) FROM result WHERE EXISTS () AND subjectNo=SELECT studentName 學(xué)生姓名, gradeIdCREATE TABLE IF NOT EXISTS grade(GradeID INT(11) NOT NULL,GradeName VARCHAR(50) DEFAULT NULL,PRIMARY KEY ('GradeID') ) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT='年級表'CREATE TABLECREATE TABLE `grade` (`GradeID` INT(11) NOT NULL,`GradeName` VARCHAR(50) DEFAULT NULL,PRIMARY KEY (`GradeID`) ) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT='年級表'INSERT INTO grade VALUES ('1','一年級'),('2','二年級'),('3','三年級'),('4','四年級')SELECT studentName 學(xué)生姓名 FROM student SELECT GradeName 年級名稱 FROM grade WHERE GradeId IN (SELECT gradeId FROM student) SELECT subjectName 課程名稱 FROM `subject` WHERE gradeID IN (SELECT gradeId FROM student) SELECT examDate 考試日期 FROM result SELECT studentResult 考試成績 FROM result WHERE examDate= (SELECT MAX(examDate) FROM result)SELECT gradeId 年級編號,sex 性別,COUNT(sex) 個數(shù) FROM student GROUP BY 年級編號,sexCREATE DATABASE IF NOT EXISTS t11 USE t11 CREATE TABLE IF NOT EXISTS sys_user ( uid INT(20) PRIMARY KEY AUTO_INCREMENT COMMENT '客戶編號', uName VARCHAR(50) NOT NULL COMMENT '客戶姓名', uPassWord VARCHAR(50) COMMENT '客戶密碼' )COMMENT='客戶信息表'CREATE TABLE IF NOT EXISTS hos_district( did INT(20) PRIMARY KEY AUTO_INCREMENT COMMENT '區(qū)縣編號', dName VARCHAR(50) NOT NULL COMMENT '區(qū)縣名稱' )COMMENT='區(qū)縣信息表'CREATE TABLE IF NOT EXISTS hos_street( sid INT(20) PRIMARY KEY AUTO_INCREMENT COMMENT '街道編號', sName VARCHAR(50) NOT NULL COMMENT '街道名稱', sDid INT(20) NOT NULL COMMENT '區(qū)縣編號',FOREIGN KEY(sDid) REFERENCES hos_district(did) )COMMENT='街道信息表'CREATE TABLE IF NOT EXISTS hos_type( hTid INT(20) PRIMARY KEY AUTO_INCREMENT COMMENT '房屋類型編號', htName VARCHAR(50) NOT NULL COMMENT '房屋類型名稱' )COMMENT='房屋類型表'CREATE TABLE IF NOT EXISTS hos_house( hMid INT(20) PRIMARY KEY AUTO_INCREMENT COMMENT '出租房屋編號', uid INT(20) NOT NULL COMMENT '客戶編號', sid INT(20) NOT NULL COMMENT '街道編號', hTid INT(20) NOT NULL COMMENT '房屋類型編號', price DECIMAL(5,2) DEFAULT 0 NOT NULL COMMENT '每月租金', topic VARCHAR(50) NOT NULL COMMENT '標(biāo)題', contents VARCHAR(50) NOT NULL COMMENT '描述', FOREIGN KEY(uid) REFERENCES sys_user(uid), FOREIGN KEY(sid) REFERENCES hos_street(sid), FOREIGN KEY(hTid) REFERENCES hos_type(hTid))COMMENT='出租房屋信息表'INSERT INTO hos_district VALUES ('2','萬泉莊'),('3','中關(guān)村'),('4','東單'),('5','西單'),('6','蘇州街'),('7','西四')UPDATE hos_district SET dName='東城區(qū)' WHERE did =1 UPDATE hos_district SET dName='海淀區(qū)' WHERE did =2 UPDATE hos_district SET dName='西城區(qū)' WHERE did=3 UPDATE hos_district SET dName='朝陽區(qū)' WHERE did=4DELETE FROM hos_district WHERE did=5 DELETE FROM hos_district WHERE did=6 DELETE FROM hos_district WHERE did=7INSERT INTO hos_street VALUES('1','東四','1'),('2','萬泉莊','2'),('3','中關(guān)村','2'),('4','東單','1'),('5','西單','3'),('6','蘇州街','2'),('7','西四','3')INSERT INTO hos_type VALUES('1','一室一廳'),('2','一室一衛(wèi)'),('3','兩室一廳'),('4','兩室一衛(wèi)')INSERT INTO sys_user VALUES('1','張建','1234'),('2','張冬雪','1234'),('3','張三','1234'),('4','王鑫','1234'),('5','李劍','1234'),('6','蔣以然','1234'),('7','李四','1234')INSERT INTO hos_house VALUES('1','1','3','2','2600.00','中關(guān)村','中關(guān)村一條街'),('2','2','2','2','1500.00','萬泉莊附近','萬泉莊附近一條街'),('3','2','2','2','2700.00','東單','東單很多美食')ALTER TABLE hos_house SET price-- 1 查詢張三發(fā)布的所有出租房屋信息,并顯示房屋分布的街道和區(qū)縣 -- 提示:結(jié)果數(shù)據(jù)來源于出租房屋信息表、客戶信息表、區(qū)縣信息表、街道信息表 -- 提示:使用連接查詢和子查詢兩種方式關(guān)聯(lián)奪標(biāo)數(shù)據(jù)實現(xiàn)SELECT dName 區(qū)縣, sName 街道, htName 戶型, price 價格, topic 標(biāo)題, contents 描述-- 2 根據(jù)戶型和房屋所在區(qū)縣和街道,為至少有兩個街道有出租房屋的區(qū)縣 -- 制作出房屋清單 -- 提示:顯示用Having子句篩選出街道數(shù)量大于1的區(qū)縣-- 3 按季度統(tǒng)計出本年各區(qū)縣街道各種戶型房屋出租數(shù)量 -- 輸出2016年從1月1日起至今的全部出租房屋數(shù)量、 -- 各區(qū)縣出租房屋數(shù)量及各街道、戶型出租房屋數(shù)量 練習(xí)代碼 mysql練習(xí)代碼?
?
第1次課 -- 01.啟動mysql服務(wù) 使用管理員身份啟動cmd net start mysql -- 02.關(guān)閉服務(wù) net stop mysql -- 03.連接mysql數(shù)據(jù)庫 如果是本機(jī) 可以省略 -h ip地址 -p和密碼不能有空格 mysql -h ip地址 -u用戶名 -p密碼 -- 04.退出數(shù)據(jù)庫 exit-- 05.查詢當(dāng)前所有的數(shù)據(jù)庫 show databases; 系統(tǒng)默認(rèn)的四個數(shù)據(jù)庫 information_schema:存放的是一些數(shù)據(jù)庫對象信息,包含:用戶表信息,字段信息,字符集信息等! performance_schema:存放的是數(shù)據(jù)庫的性能參數(shù)信息! mysql:存放的系統(tǒng)用戶權(quán)限信息! test:數(shù)據(jù)庫管理系統(tǒng)默認(rèn)創(chuàng)建的測試數(shù)據(jù)庫!任何用戶都可以使用!-- 06.sql(結(jié)構(gòu)化查詢語言)01.DDL(數(shù)據(jù)定義語言) create drop alter02.DQL(數(shù)據(jù)查詢語言) select03.DML(數(shù)據(jù)操作) insert delete update04.DCL(數(shù)據(jù)控制語言) commit rollback grant revoke-- 07.邏輯運算符and or not-- 08.創(chuàng)建數(shù)據(jù)庫 CREATE DATABASE t12; SHOW DATABASES; -- 09.切換數(shù)據(jù)庫 USE t12; -- 10.刪除數(shù)據(jù)庫 DROP DATABASE t12;-- 11.創(chuàng)建表 反引號` 是用來區(qū)分mysql中的關(guān)鍵字 -- ZEROFILL:不足位數(shù)使用0代替!超過位數(shù),實際顯示! CREATE TABLE `test_01`( tid INT(4) ZEROFILL );-- 新增數(shù)據(jù) INSERT INTO test_01(tid) VALUES(20); INSERT INTO test_01 VALUES(2000); INSERT INTO test_01 VALUES(20000);-- 12.默認(rèn)int是有符號的 可以取負(fù)數(shù) CREATE TABLE `test_02`( tid INT(4) );-- 同時插入多條記錄 負(fù)數(shù)可以插入 INSERT INTO test_02 VALUES(20),(1234),(-123456)-- UNSIGNED 無符號的 只能是整數(shù) 包含0 CREATE TABLE `test_03`( tid INT(4) UNSIGNED );-- 同時插入多條記錄 負(fù)數(shù)不可以插入 INSERT INTO test_03 VALUES(20),(1234),(-123456)-- 刪除測試的三個表 DROP TABLE test_01; -- 13. 字符串類型 -- 01.char 固定長度的字符串 CREATE TABLE test_01( NAME CHAR(20) ); INSERT INTO test_01 VALUES('哈哈') -- 最后一個 啊 會被自動截斷! 因為字符串超出了規(guī)定長度 INSERT INTO test_01 VALUES('哈哈啊')-- 02.varchar 可變長度的字符串 CREATE TABLE test_02( NAME VARCHAR(2) ); -- 最后一個 啊 會被自動截斷! 因為字符串超出了規(guī)定長度 INSERT INTO test_02 VALUES('哈哈啊')-- 看不出區(qū)別 -- char(20)默認(rèn)就已經(jīng)開辟了20個空間 -- varchar(20)開辟了實際使用的空間-- 14.日期格式 -- DATE : YYYY-MM-DD -- DATETIME: YYYY-MM-DD HH:MM:SS -- TIMESTAMP: YYYY-MM-DD HH:MM:SS 1970年1月1日開始的 !首選! -- TIME : HH:MM:SS -- YEAR : YYYY-- 15.創(chuàng)建表 -- creat table [if not exists] 表名( -- 字段1 數(shù)據(jù)類型 [字段屬性][約束][索引][注釋], -- 字段2 數(shù)據(jù)類型 [字段屬性][約束][索引][注釋] -- )[表類型][表字符集][注釋];-- 16.字段的約束和屬性 -- 01.非空約束 not null 字段不允許為空 -- 02.默認(rèn)約束 default 字段的默認(rèn)值 -- 03.唯一約束 unique key(字段名稱) uk -- 設(shè)置字段是唯一的不允許重復(fù),可以為空,但是只能有一個空值 -- 04.主鍵約束 primary key(字段名稱) pk -- 設(shè)置表中的主鍵,唯一標(biāo)識該行! -- 05.外鍵約束 foreign key(字段名稱) fk -- 建立在從表中,用于關(guān)聯(lián)兩個表之間的關(guān)系 -- 需要指定引用了主表中的哪個字段 -- 06.自動增長 auto_increment -- 設(shè)置字段自動增長,默認(rèn)從1開始!通常設(shè)置在主鍵上! -- 07.注釋 COMMENT 給字段增加解釋 CREATE TABLE IF NOT EXISTS student(sid INT(4) ZEROFILL PRIMARY KEY AUTO_INCREMENT COMMENT '學(xué)生編號',sname VARCHAR(20) NOT NULL COMMENT '學(xué)生姓名',sage INT(3) NOT NULL DEFAULT 20 COMMENT '學(xué)生年齡' );-- 新增數(shù)據(jù) INSERT INTO student(sname,sage) VALUES('小黑',DEFAULT); INSERT INTO student(sid,sname,sage) VALUES(2,'小黑2',DEFAULT); -- 如果指定了主鍵的值,就是指定的! 下次的自增沖動指定的值開始! INSERT INTO student(sid,sname,sage) VALUES(789,'小黑3',DEFAULT);-- 查詢剛剛插入數(shù)據(jù)的主鍵 INSERT INTO student(sname,sage) VALUES('小黑4',DEFAULT); SELECT @@identity;第2次課 -- 切換到指定的數(shù)據(jù)庫 USE t12 -- 創(chuàng)建Student表 CREATE TABLE IF NOT EXISTS student( studentNo INT(4) PRIMARY KEY COMMENT '學(xué)號', loginPwd VARCHAR(20) NOT NULL COMMENT '密碼', studentName VARCHAR(50) NOT NULL COMMENT '姓名', sex CHAR(2) NOT NULL DEFAULT '男' COMMENT '性別', gradeID INT(4) UNSIGNED COMMENT '年級編號', phone VARCHAR(50) COMMENT '手機(jī)號碼', address VARCHAR(255) DEFAULT '地址不詳' COMMENT '地址', bornDate DATETIME COMMENT '出生日期', email VARCHAR(50) COMMENT '郵箱', identityCard VARCHAR(18) UNIQUE KEY COMMENT '身份證號' )COMMENT='學(xué)生表';兩種方式備份和導(dǎo)入數(shù)據(jù) 01.使用dbms 02.cmd命令行工具 前提 必須配置了mysql環(huán)境變量備份: mysqldump -u用戶名 -p 數(shù)據(jù)庫名稱 >路徑備份指定的表:mysqldump -u用戶名 -p 數(shù)據(jù)庫名稱 表名1 表名2 >路徑恢復(fù): mysql -u用戶名 -p 數(shù)據(jù)庫名稱< 路徑 --必須存在數(shù)據(jù)庫-- 創(chuàng)建年級表 CREATE TABLE IF NOT EXISTS grade( gradeId INT(4) PRIMARY KEY COMMENT '年級編號', gradeName VARCHAR(20) NOT NULL COMMENT '年級名稱' )ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT='年級表'; -- 查詢本數(shù)據(jù)庫中下所有的表 SHOW TABLES;-- 查看表的結(jié)構(gòu) DESC student;-- 刪除表 DROP TABLE IF EXISTS 表名-- 修改表名 alter table 舊表名 rename [to] 新表名 ALTER TABLE student RENAME [TO] stu; -- 添加字段 -- alter table 表名 add 字段名稱 屬性 ALTER TABLE student ADD age INT(3) NOT NULL COMMENT '年齡'; -- 修改字段 alter table 表名 change 舊字段 新字段 屬性 ALTER TABLE student CHANGE age ages INT(4) NOT NULL; -- 刪除字段 alter table 表名 drop 字段名稱 ALTER TABLE student DROP ages;-- mysql系統(tǒng)幫助文檔 help 查詢內(nèi)容(命令); -- 添加主鍵 ALTER TABLE 表名 ADD CONSTRAINT pk_studentNo主鍵名稱 PRIMARY KEY 表名(主鍵字段)-- 創(chuàng)建外鍵約束 必須在從表中創(chuàng)建 ALTER TABLE 從表名稱 ADD CONSTRAINT fk_student_grade外鍵約束名稱 FOREIGN KEY(從表的外鍵字段) REFERENCES 主表名稱(主鍵)-- 給student表中增加外鍵并且設(shè)置 刪除是為 cascade -- 新增grade表中3條信息 INSERT INTO grade VALUES(1,'1年級'),(2,'2年級'),(3,'3年級'); -- 查詢表中所有的記錄 SELECT * FROM grade; -- 刪除年級編號為1的記錄 的時候,對應(yīng)的所有學(xué)生 也被刪除了 DELETE FROM grade WHERE gradeid=1; 并且設(shè)置 刪除是為 set null!-- 查詢所有的存儲引擎 SHOW ENGINES -- 查看當(dāng)前默認(rèn)的存儲引擎 SHOW VARIABLES LIKE 'storage_engine%'; -- 修改存儲引擎 -- 修改my.ini配置文件 default- storage-engine=InnoDB -- 重啟服務(wù)--修改指定表中的存儲引擎 alter table 表名 engine=引擎-- MyISAM類型的標(biāo)文件 01.*.frm 表結(jié)構(gòu)的定義文件 02.*.MYD 數(shù)據(jù)文件 03.*.MYI 索引文件 -- InnoDB類型的標(biāo)文件 01.*.frm 表結(jié)構(gòu)的定義文件 02.*.ibd 數(shù)據(jù)文件 -- datadir地址下會有一個ibdata1:存儲了所有InnoDB類型表中的數(shù)據(jù)!-- 查詢student表中所有的數(shù)據(jù) SELECT * FROM student;-- update 表名 set 字段1=值1,字段2=值2 [where 條件]-- 修改所有學(xué)生的密碼 為 admin UPDATE student SET loginPwd='admin' -- 修改學(xué)生編號為2的密碼 為 admins UPDATE student SET loginPwd='admins' WHERE studentNo=2-- 刪除數(shù)據(jù) delete from 表名 [where 條件] DELETE FROM student;-- 刪除學(xué)生編號為2的數(shù)據(jù) DELETE FROM student WHERE studentNo=2;-- truncate table 表名!-- delete 和truncate的區(qū)別 01.delete可以加條件 02.truncate只能刪除表中所有的數(shù)據(jù) 03.delete刪除之后可以恢復(fù)數(shù)據(jù) 04.truncate不能恢復(fù)數(shù)據(jù)!慎用! 05.truncate指定速度比delete快! 06.truncate語句刪除后將重置自增列!其他結(jié)構(gòu)不變!-- 創(chuàng)建學(xué)生課程表 subject CREATE TABLE IF NOT EXISTS `subject`(subjectNo INT(4) PRIMARY KEY AUTO_INCREMENT COMMENT '課程編號',subjectName VARCHAR(50) NOT NULL COMMENT '課程名稱',classHour INT(4) COMMENT '學(xué)時',gradeId INT(4) COMMENT '年級編號' )COMMENT='課程表';-- 查詢student表中所有的數(shù)據(jù) SELECT studentName,address FROM student;-- 按照課時的大小 進(jìn)行降序排列 -- asc:默認(rèn)值!升序 desc:降序 SELECT * FROM `subject` ORDER BY classHour DESC -- 查詢年級編號為1的課程,并且按照課時升序排列 SELECT * FROM `subject` WHERE gradeId=1 ORDER BY classHour ASC -- 查詢年級編號為1的課程,并且按照課時升序排列的同時 -- 按照課程編號在降序排列 SELECT * FROM `subject` WHERE gradeId=1 ORDER BY classHour ASC,subjectNo DESC-- 使用別名 as -- select 字段[as] 別名 from 表名 -- 查詢課程名稱 和 課時 SELECT subjectName AS '課程名稱',classHour AS '課時' FROM `subject`-- 合并列01. +的數(shù)據(jù)類型 必須一致02. +的如果是字符類型,拼接字符串03. +的是數(shù)值類型,就是求和! SELECT * FROM student -- 學(xué)生姓名和地址 進(jìn)行合并 SELECT (studentNo+','+gradeId ) AS '整合體' FROM student-- 查詢電話號碼為空的行 is null SELECT * FROM student WHERE phone IS NULL -- 查詢電話號碼不為空的行 is not null SELECT * FROM student WHERE phone IS NOT NULL第3次課 -- 聚合函數(shù) -- 查詢表中一共有多少條記錄 SELECT COUNT(*) FROM student -- 查看表中指定字段不為空的記錄 SELECT COUNT(phone) FROM student -- 查詢年齡最大的數(shù)據(jù) SELECT MAX(age) FROM student -- 查詢年齡最小的數(shù)據(jù) SELECT MIN(age) FROM student -- 求所有年齡的平均值 SELECT AVG(age) FROM student -- 求所有年齡之和 SELECT SUM(age) FROM student-- 字符串函數(shù) -- 字符串的連接 SELECT CONCAT('My','S','ql'); -- 字符串替換 下標(biāo)從1開始 SELECT INSERT('大家辛苦了!',1,3,'哈哈'); -- 字符串的截取 下標(biāo)從1開始 SELECT SUBSTRING('大家辛苦了!',1,3); -- 字符串變大 小 寫 SELECT LOWER('AAA'); SELECT UPPER('aaa');-- 常用的時間和日期函數(shù) -- 01.獲取當(dāng)前的日期 SELECT CURDATE(); -- 02.獲取當(dāng)前的時間 SELECT CURTIME(); -- 03.獲取當(dāng)前的日期和時間 SELECT NOW(); -- 04.返回日期是一年中的第幾周 SELECT WEEK(NOW()); -- 05.只獲取年 SELECT YEAR(NOW()); -- 06.只獲取小時 SELECT HOUR(NOW()); -- 07.獲取兩個日期差 SELECT DATEDIFF(NOW(),'2017-03-07'); -- 08.返回現(xiàn)在的時間加上某個時間之后的日期 SELECT ADDDATE(NOW(),24);-- 數(shù)學(xué)函數(shù) SELECT CEIL(3.1); -- 天花板函數(shù) SELECT FLOOR(3.9); SELECT RAND(); -- 0-1之間的隨機(jī)數(shù)-- 把所有的成績降低10%后加5分,再查詢及格成績 -- 并且按照成績 降序排列 SELECT studentNo AS '學(xué)號',(studentResult*0.9+5) AS '成績' FROM result WHERE (studentResult*0.9+5)>=60 ORDER BY '成績' DESC-- 查詢所有年級編號為1 的學(xué)生信息,并且按照 學(xué)號升序排列 -- 01. 顯示前4條記錄 SELECT * FROM student WHERE gradeid=1 ORDER BY studentno LIMIT 4 -- 02. 每頁顯示4條 顯示第2頁的內(nèi)容 SELECT * FROM student WHERE gradeid=1 ORDER BY studentno LIMIT 4,4 -- 需要注意的是:第一條記錄的是 0! -- limit a,b -- a:從那一條記錄開始 -- b:每頁顯示多少條數(shù)據(jù)-- 將學(xué)生表中學(xué)號為20000的學(xué)生郵箱改成stu@20000.163.com -- 密碼改成000 UPDATE student SET email='stu@20000.163.com',loginpwd='000' WHERE studentNo=20000-- 將科目表中課時數(shù)大于200的并且年級編號是1的課時減少10! UPDATE `subject` SET classHour=classHour-10 WHERE classHour>=200 AND gradeid=1-- 將所有年級編號是1的學(xué)生姓名,性別,出生日期,手機(jī)號碼 -- 都保存到一個新的表中 student_new CREATE TABLE IF NOT EXISTS student_new( SELECT studentName,sex,bornDate,phone FROM student WHERE gradeid=1 )-- 01.查詢2016年2月17日考試 前5名的學(xué)員的學(xué)號和分?jǐn)?shù) SELECT studentNo 學(xué)號,studentResult 分?jǐn)?shù) FROM result WHERE examDate='2016-02-17' ORDER BY 分?jǐn)?shù) DESC LIMIT 5-- 02. 將所有女學(xué)生按年齡從大到小排序 -- 從第2條記錄開始顯示6名女學(xué)生的姓名、年齡、出生日期、手機(jī)號信息 SELECT studentName 姓名,(YEAR(NOW())-YEAR(bornDate)) 年齡, bornDate 出生日期,phone 手機(jī)號碼 FROM student WHERE sex='女' ORDER BY 年齡 DESC LIMIT 1,6-- 03.按出生年份分組統(tǒng)計學(xué)生人數(shù) -- 將各組中人數(shù)達(dá)到2人的年份和人數(shù)顯示出來SELECT YEAR(bornDate) 出生年份, COUNT(studentNo) 人數(shù) FROM student GROUP BY 出生年份 HAVING 人數(shù)>=2 -- 04.查詢參加2016年2月17日考試的所有學(xué)員的最高分、最低分、平均分。 SELECT MAX(studentResult) 最高分,MIN(studentResult) 最低分, AVG(studentResult) 平均分 FROM result WHERE examDate='2016-02-17'5. select 字段1,字段2....1. from 表名2. where 條件1 and 條件23. group by 分組依據(jù)4. having 分組條件6. order by 排序字段7. limit 分頁-- 查詢grade和student所有的數(shù)據(jù) SELECT * FROM student,grade 13+4 13*4 -- 笛卡爾積 -- 怎么解決這個問題? 找出兩個表中關(guān)聯(lián)的字段 SELECT * FROM student,grade WHERE student.`gradeId`=grade.`gradeId`-- 查詢出 年齡比 李斯文 小的學(xué)生信息 -- 01.先查詢李斯文的年齡 1993-07-23 SELECT bornDate FROM student WHERE studentName='李斯文' -- 02.把查詢出來的結(jié)果當(dāng)成條件繼續(xù)查詢 SELECT bornDate FROM student WHERE bornDate>'1993-07-23' -- 疑問? 能不能把兩個sql合并在一起執(zhí)行 -- 我們就把 '1993-07-23'當(dāng)成一個java中的變量名 -- 指向了01的sql STRING a="521"; Stirng b=a+"125"; syso(b) syso(a+"125")-- 使用子查詢來實現(xiàn) -- 子查詢就是一個嵌套在select,insert,update或者delete語句或者 -- 其他查詢語句中的查詢語句! -- 語法: select ... from 表 where 字段 比較運算符(子查詢) SELECT bornDate FROM student WHERE bornDate>(SELECT bornDate FROM student WHERE studentName='李斯文') -- 子查詢和比較運算符聯(lián)合使用的使用,必須保證子查詢返回的值是不能多于一個!-- 查詢出 最近一次java課程 考試成績的最高分和最低分 -- 01.時間是最大的 最高分和最低分 result -- 02.java課程 subject -- 分析 分解書寫 -- 01.先獲取課程java的編號 SELECT subjectNo 學(xué)號 FROM `subject` WHERE subjectName='java'-- 02.最近java課程 的考試日期 SELECT MAX(examDate) 考試日期,MAX(studentResult) 最高分, MIN(studentResult) 最低分 FROM result WHERE subjectNo=1-- 03.最近的日期 SELECT MAX(examDate) FROM result-- 使用子查詢 SELECT MAX(examDate) 考試日期,MAX(studentResult) 最高分, MIN(studentResult) 最低分 FROM result WHERE subjectNo=(SELECT subjectNo 學(xué)號 FROM `subject` WHERE subjectName='java') AND examDate=(SELECT MAX(examDate) FROM result) -- 日期是最近的!-- 查詢java課程考試成績?yōu)?0的學(xué)生姓名 -- 01.先找java的課程編號 SELECT subjectNo 學(xué)號 FROM `subject` WHERE subjectName='java'-- 02.找java的成績是60的 SELECT studentResult 成績 FROM result WHERE studentResult=60 AND subjectNo=(SELECT subjectNo 學(xué)號 FROM `subject` WHERE subjectName='java')-- 03.找學(xué)生編號 student 怎么和 result表關(guān)聯(lián)的??? SELECT studentNo 編號 FROM result WHERE studentResult=60 AND subjectNo=(SELECT subjectNo 學(xué)號 FROM `subject` WHERE subjectName='java')-- 使用IN替換=之后的子查詢 -- IN后面的子查詢語句可以返回多條結(jié)果 SELECT studentName 姓名 FROM student WHERE studentNo IN (SELECT studentNo 編號 FROM result WHERE studentResult=95 AND subjectNo=(SELECT subjectNo 學(xué)號 FROM `subject` WHERE subjectName='java'))-- 查詢學(xué)生姓名是張秋麗的信息 SELECT * FROM student WHERE studentName='張秋麗' -- 查詢學(xué)生姓名是張秋麗 或者 肖梅 的信息 SELECT * FROM student WHERE studentName='張秋麗' OR studentName='肖梅'-- 查詢學(xué)生姓名是張秋麗 或者 肖梅 再 或者是 王寶寶 的信息 SELECT * FROM student WHERE studentName='張秋麗'OR studentName='肖梅' OR studentName='王寶寶'-- 使用IN替換 多個條件 SELECT * FROM student WHERE studentName IN ('張秋麗','肖梅','王寶寶')-- 使用NOT IN -- 查詢出 沒有參加最近一次java課程考試的學(xué)生姓名以及編號 SELECT studentName 姓名,studentNo 編號 FROM student WHERE studentNo NOT IN ( SELECT studentNo FROM result WHERE subjectNo=(SELECT subjectNo FROM `subject` WHERE subjectName='java') AND examDate=(SELECT MAX(examDate) FROM result) )第4次課 -- EXISTS : select ... from 表名 where exists(子查詢) -- 子查詢有返回結(jié)果 exists(子查詢)返回true 外層查詢執(zhí)行 -- 子查詢沒有返回結(jié)果 exists(子查詢)返回false 外層查詢不執(zhí)行-- 檢查Java課程最近一次考試。 -- 如果有成績達(dá)到80分以上者,則顯示分?jǐn)?shù)排在前5名學(xué)員的學(xué)號和分?jǐn)?shù)-- 01.查詢java課程的編號 SELECT subjectNo FROM `subject` WHERE subjectName='java' -- 02.上面的當(dāng)成一個條件 繼續(xù)查詢 result SELECT * FROM result WHERE subjectNo=(SELECT subjectNo FROM `subject` WHERE subjectName='java') -- 拿到了java所有的考試信息 -- 03. 再次拿到最近考試的時間 SELECT MAX(examDate) FROM result -- 04.再把03當(dāng)成條件 拼接查詢02 SELECT * FROM result WHERE subjectNo=(SELECT subjectNo FROM `subject` WHERE subjectName='java') AND examDate=(SELECT MAX(examDate) FROM result) -- 05.如果成績有大于80的 查詢出前5名 SELECT * FROM result WHERE studentResult>80 AND subjectNo=(SELECT subjectNo FROM `subject` WHERE subjectName='java') AND examDate=(SELECT MAX(examDate) FROM result)-- 06.整體放在exists中 并增加條件 SELECT studentNo 學(xué)號,studentResult 分?jǐn)?shù) FROM result WHERE EXISTS ( SELECT * FROM result WHERE studentResult>80 AND subjectNo=(SELECT subjectNo FROM `subject` WHERE subjectName='java') AND examDate=(SELECT MAX(examDate) FROM result) ) AND subjectNo=(SELECT subjectNo FROM `subject` WHERE subjectName='java') ORDER BY studentResult DESC LIMIT 5;-- 檢查java課程最近一次考試成績 -- 如果全部未通過考試(60分及格),認(rèn)為本次考試偏難,計算的該次考試平均分加5分 -- not exists-- 01.查詢java課程的編號 SELECT subjectNo FROM `subject` WHERE subjectName='java' -- 02.查詢考試成績 01的結(jié)果是1 SELECT studentResult FROM result WHERE subjectNo=1 -- 03. 合并 12 SELECT studentResult FROM result WHERE subjectNo=(SELECT subjectNo FROM `subject` WHERE subjectName='java') -- 04.獲取最近一次考試的時間 SELECT MAX(examDate) FROM result -- 05. 合并 34 SELECT studentResult FROM result WHERE subjectNo=(SELECT subjectNo FROM `subject` WHERE subjectName='java') AND examDate=(SELECT MAX(examDate) FROM result) -- 06. 獲取成績小于60的 SELECT studentResult FROM result WHERE subjectNo=(SELECT subjectNo FROM `subject` WHERE subjectName='java') AND examDate=(SELECT MAX(examDate) FROM result) AND studentResult>60 -- 07.如果都沒及格 06沒有結(jié)果集 SELECT AVG(studentResult)+5 平均分 FROM result WHERE NOT EXISTS ( SELECT studentResult FROM result WHERE subjectNo=(SELECT subjectNo FROM `subject` WHERE subjectName='java') AND examDate=(SELECT MAX(examDate) FROM result) AND studentResult>60 ) AND subjectNo=(SELECT subjectNo FROM `subject` WHERE subjectName='java') AND examDate=(SELECT MAX(examDate) FROM result)-- 如果有1年級的學(xué)生 -- 就查詢參加2年級學(xué)科考試的學(xué)員學(xué)號、科目編號、考試成績,考試時間-- 01.查詢有沒有1年級的學(xué)生 student表 SELECT * FROM student WHERE gradeId= (SELECT gradeId FROM grade WHERE gradeName='1年級')-- 02.查詢2年級下面的學(xué)科 SELECT subjectNo FROM `subject` WHERE gradeId=(SELECT gradeId FROM grade WHERE gradeName='2年級')-- 03.整體的結(jié)果 SELECT studentNo 學(xué)號,subjectNo 科目編號,studentResult 考試成績, examDate 考試時間 FROM result WHERE EXISTS( SELECT * FROM student WHERE gradeId= (SELECT gradeId FROM grade WHERE gradeName='1年級') ) AND subjectNo IN (SELECT subjectNo FROM `subject` WHERE gradeId=(SELECT gradeId FROM grade WHERE gradeName='2年級'))-- 使用子查詢的注意事項 -- 01.任何允許使用表達(dá)式的地方都可以使用子查詢 -- 02.只出現(xiàn)在子查詢中但是沒有在父查詢中出現(xiàn)的列,結(jié)果集中的列不能包含!-- 為每個學(xué)生制作在校期間每門課程的成績單 -- 要求每個學(xué)生參加每門課程的最后一次考試成績作為該生本課程的最終成績 -- 成績單的數(shù)據(jù)項 學(xué)生姓名 課程所屬的年級名稱 課程名稱 考試日期 考試成績 SELECT studentName 學(xué)生姓名, (SELECT gradeName FROM grade WHERE gradeId=`subject`.`gradeId`) 課程所屬的年級名稱, subjectName 課程名稱 , examDate 考試日期 ,studentResult 考試成績 FROM result r1 INNER JOIN student ON r1.`studentNo`=student.`studentNo` INNER JOIN `subject` ON r1.`subjectNo`=`subject`.`subjectNo` WHERE r1.`examDate` IN (SELECT MAX(examDate) FROM result r2WHERE r1.`subjectNo`=r2.`subjectNo`GROUP BY r2.`subjectNo` )-- 隱式內(nèi)連接 SELECT studentName 學(xué)生姓名,gradeName 年級名稱 FROM student,grade WHERE student.`gradeId`=grade.`gradeId`-- 顯式內(nèi)連接 SELECT studentName 學(xué)生姓名,gradeName 年級名稱,subjectName 課程名稱 FROM student INNER JOIN grade ON student.`gradeId`=grade.`gradeId`-- 統(tǒng)計每門課程平均分各是多少 分組SELECT subjectNo 課程編號,AVG(studentResult) FROM result GROUP BY subjectNo -- 平均分在60分以上的 SELECT subjectNo 課程編號,AVG(studentResult) 平均分 FROM result GROUP BY subjectNo HAVING 平均分>=60-- 并按照平均成績 升序排列 SELECT subjectNo 課程編號,AVG(studentResult) 平均分 FROM result GROUP BY subjectNo HAVING 平均分>=60 ORDER BY 平均分 -- 統(tǒng)計每個年級的 男,女人數(shù) -- 拿到 年級編號 性別 人數(shù)SELECT gradeId 年級編號 , sex 性別 , COUNT(studentNo) 人數(shù) FROM student GROUP BY gradeId,sex-- 內(nèi)連接 inner join-- 外連接01.左外連接 left join02.右外連接 right join-- 拿到student 和 年級表的數(shù)據(jù) -- 獲取學(xué)生編號 學(xué)生姓名 年級名稱SELECT studentNo ,studentName,gradeName FROM student INNER JOIN grade ON student.`gradeId`=grade.`gradeId`SELECT studentNo ,studentName,gradeName FROM student,grade WHERE student.`gradeId`=grade.`gradeId`-- 三表聯(lián)查 -- 查詢學(xué)生姓名,學(xué)生成績 ,課程名稱 SELECT studentName 學(xué)生姓名,studentResult 學(xué)生成績,subjectName 課程名稱 FROM student s INNER JOIN result r ON s.`studentNo`=r.`studentNo` INNER JOIN `subject` j ON r.`subjectNo`=j.`subjectNo`-- 左外連接 以左表為準(zhǔn),如果右表中沒有對應(yīng)的數(shù)據(jù) ,則右表返回null -- 查詢所有學(xué)生的成績 和姓名 SELECT DISTINCT(studentName) 姓名, studentResult 成績 FROM student LEFT JOIN result ON result.`studentNo`=student.`studentNo`-- 右外連接 以右表為準(zhǔn),如果左表中沒有對應(yīng)的數(shù)據(jù) ,則左表返回null SELECT DISTINCT(studentName) 姓名, studentResult 成績 FROM student RIGHT JOIN result ON result.`studentNo`=student.`studentNo`-- 把查詢的語句 存入到 臨時表中 -- 臨時表只有當(dāng)前的鏈接可見 隨連接的關(guān)閉自動刪除 -- 臨時表的更改不會影響到真表 CREATE TEMPORARY TABLE haha(SELECT studentName FROM student) SELECT * FROM hahamysql筆記 mysql筆記?
轉(zhuǎn)載于:https://www.cnblogs.com/xtdxs/p/6690549.html
總結(jié)
以上是生活随笔為你收集整理的mysql20170410练习代码+笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: POI读取Excel内容格式化
- 下一篇: 正确理解Python函数是第一类对象