Mysql資料庫學習(4)階段性完結
-- 倒序輸出全部使用者的許可權資訊
SELECT * from users order by powers desc
-- 統計女生人數,靈活使用count,看題目要求,你要計算的是什麼?
SELECT COUNT(sid) FROM `student` WHERE ssex='f'
-- 統計一共開設了多少了專業
SELECT COUNT(DISTINCT szhuanye) as 專業數 FROM student
-- 統計每個專業的人數
SELECT szhuanye AS 專業名稱,COUNT(sid) as 學生人數 FROM student GROUP BY szhuanye
-- 統計每個專業的男生和女生的人數
SELECT szhuanye AS 專業名稱,ssex AS 性別,COUNT(sid) as 學生人數 FROM student GROUP BY szhuanye,ssex
-- 統計每個專業的學生的人數,只顯示超過5個人的記錄,HAVING對的是查詢結果進行操作,
-- 但是where是對欄位進行操作,去了別名之後就不需要加所謂的單引號、雙引號
SELECT szhuanye,COUNT(sid)as 學生人數 FROM student GROUP BY szhuanye HAVING 學生人數>5
-- 統計每門課程的平均分、最高分和最低分
select cname 課程名稱,avg(score) 平均分, max(score) 最高分,min(score) 最低分
from score sc,course c
where sc.cid=c.cid GROUP BY sc.cid
-- 計算每個學生的總成績
select sname 姓名,SUM(score) as 總成績 from student s,score sc
where s.sid = sc.sid GROUP BY sc.sid
-- 計算英語專業成績低於75分的學生資訊
select s.sid,sname,sage,ssex,szhuanye,score,cname
from student s,course c, score sc
where s.sid=sc.sid and c.cid=sc.cid
and cname='英語'
and score<75
-- 在students表中利用模糊查詢完成操作:
-- 1. 找出所有姓劉的同學,顯示全部資訊
select * from student where sname LIKE '劉%'
-- 2. 找出姓名中含有"敏"的同學,顯示全部資訊
select * from student where sname LIKE '%敏%'
-- 3. 找出所有姓張,且姓名中含有"妹"的同學,顯示全部資訊
select * from student where sname LIKE '張%妹%'
-- 4. 找出所有姓林,最後一個字為"如"的同學,顯示全部資訊
select * from student where sname LIKE '林%如'
-- 難點、經典例題
create database nba;
use nba;
create table teams(
tid TINYINT PRIMARY KEY auto_increment,
tname varchar(20) not null
)charset='utf8';
create table results(
id TINYINT PRIMARY KEY auto_increment,
hid tinyint not null,
gid tinyint not null,
match_time datetime ,
result varchar(10) not null
)charset='utf8';
insert into teams values(default,'小牛'),(default,'爵士'),(default,'火箭'),
(default,'雷霆'),(default,'老鷹');
insert into results values(default,2,4,'2016-12-01 08:00:00','99:83');
insert into results values(default,3,4,'2016-12-02 08:00:00','84:101');
insert into results values(default,2,5,'2016-12-02 19:30:00','78:87');
insert into results values(default,5,1,'2016-12-03 08:00:00','121:109');
insert into results values(default,3,5,'2016-12-03 19:30:00','99:103');
select * from teams;
select * from results;
use score
select t1.tname 主隊名稱,t2.tname 客隊名稱,match_time,result
from teams t1
RIGHT JOIN
results r
on r.hid= t1.tid
LEFT JOIN teams t2
on r.gid = t2.tid
select * from langTable
id pid name
2 6 精品錢包
3 4 單冷空調
4 1 空調
5 5 箱包
6 5 男士包
1 1 家用電器
家用電器 空調 單冷空調
電視 平板
液晶
箱包
------- 利用遞迴思想實現(從第一級開始找,找到以它為pid的第二級,再找以當前id為pid的第三級,找完後回到第二級再繼續找其它第二級目錄...)
指令碼語言 程式語言
編譯語言 程式語言
PHP 指令碼語言
-- ----------------------------
-- Table structure for langtable
-- ----------------------------
DROP TABLE IF EXISTS `langtable`;
CREATE TABLE `langtable` (
`lid` int(11) NOT NULL AUTO_INCREMENT,
`pid` int(11) NOT NULL,
`lname` varchar(20) DEFAULT NULL,
PRIMARY KEY (`lid`)
) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of langtable
-- ----------------------------
INSERT INTO `langtable` VALUES ('1', '9', '指令碼語言');
INSERT INTO `langtable` VALUES ('2', '9', '編譯語言');
INSERT INTO `langtable` VALUES ('3', '1', 'PHP');
INSERT INTO `langtable` VALUES ('4', '1', 'JS');
INSERT INTO `langtable` VALUES ('5', '1', 'Python');
INSERT INTO `langtable` VALUES ('6', '9', 'C');
INSERT INTO `langtable` VALUES ('7', '9', 'C++');
INSERT INTO `langtable` VALUES ('8', '9', 'Java');
INSERT INTO `langtable` VALUES ('9', '9', '程式語言');
select l1.lname 語言,l2.lname 父語言 from langTable l1
LEFT JOIN langTable l2
ON l1.pid = l2.lid