知識(shí)要點(diǎn):
- 單表查詢
- 子查詢
- 聯(lián)表查詢
- 事務(wù)
在進(jìn)行查詢之前硼啤,我們要先建好關(guān)系表议经,并往數(shù)據(jù)表中插入些數(shù)據(jù)。為查詢操作做好準(zhǔn)備谴返。
五張關(guān)系表的創(chuàng)建:
#創(chuàng)建并進(jìn)入數(shù)據(jù)庫:
mysql> CREATE DATABASE `info`;
Query OK, 1 row affected (0.00 sec)
mysql> USE `info`;
Database changed
#創(chuàng)建學(xué)院表:
CREATE TABLE `department`(
`id` INT PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(20) NOT NULL
);
#創(chuàng)建學(xué)生表:
CREATE TABLE `student`(
`s_id` INT PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(20) NOT NULL,
`dept_id` INT,
FOREIGN KEY(`dept_id`) REFERENCES `department` (`id`)
);
#創(chuàng)建學(xué)生的詳細(xì)信息表:
CREATE TABLE `stu_details`(
`s_id` INT PRIMARY KEY,
`age` INT,
`sex` CHAR(1),
FOREIGN KEY(`s_id`) REFERENCES `student` (`s_id`)
);
#創(chuàng)建課程表:
CREATE TABLE `course`(
`id` INT PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(20) NOT NULL
);
#創(chuàng)建中間表:
CREATE TABLE `select`(
`s_id` INT,
`c_id` INT,
PRIMARY KEY (`s_id`,`c_id`),
FOREIGN KEY (`s_id`) REFERENCES `student`(`s_id`),
FOREIGN KEY (`c_id`) REFERENCES `course`(`id`)
);
#查看當(dāng)前存在的表:
mysql> SHOW TABLES;
往數(shù)據(jù)表中添加數(shù)據(jù)
#往學(xué)院表中添加數(shù)據(jù):
mysql> INSERT INTO `department`(`name`)
-> VALUES('外國(guó)語'),('藝術(shù)'),('計(jì)算機(jī)'),('化工');
#往學(xué)生表中添加數(shù)據(jù):
mysql> INSERT INTO `student`(`name`,`dept_id`)
-> VALUES('小明',1),('小紅',3),('小花',3),('小新',4),('張三',2),('劉三',3);
#往學(xué)生詳細(xì)信息表中添加數(shù)據(jù):
mysql> INSERT INTO stu_details
-> VALUES(1,18,'男'),(4,20,'女'),(3,16,'女'),(2,19,'男');
#往課程表中添加數(shù)據(jù):
mysql> INSERT INTO `course`(`name`)
-> VALUES ('心理學(xué)'),('佛學(xué)'),('近代史'), ('音樂鑒賞');
#查看中間表的結(jié)構(gòu): (select是關(guān)鍵字煞肾,要加反引號(hào))
mysql> DESC `select`;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| s_id | int(11) | NO | PRI | NULL | |
| c_id | int(11) | NO | PRI | NULL | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.03 sec)
#往中間表中添加數(shù)據(jù)
mysql> INSERT INTO `select`
-> VALUES(1,2),(1,4),(2,1),(2,4),(4,1),(4,2),(4,4);
查詢
查詢所有記錄
SELECT * FROM tb_name;
SELECT * FROM `department`;
SELECT * FROM `student`;
SELECT * FROM `stu_details`;
SELECT * FROM `course`;
SELECT * FROM `select`;
查詢選中列記錄
SELECT col_name1,col_name2 FROM tb_name;
查詢指定條件下的記錄
SELECT col_name FROM tb_name WHERE 條件
查詢后為列取別名
SELECT col_name AS new_name FROM tab_name
#as可寫可不寫
模糊查詢
SELECT 字段 FROM 表 WHERE 某字段 Like 條件
#查詢所有記錄:
mysql> SELECT * FROM `student`;
#查詢選中列記錄
mysql> SELECT name,dept_id FROM student;
#查詢指定條件下的記錄
mysql> SELECT * FROM student WHERE `name`='小紅';
#查詢后為列取別名
SELECT name AS `姓名` ,dept_id AS 學(xué)院id FROM student WHERE s_id>=2;
SELECT name ,dept_id FROM student WHERE s_id>=2;
SELECT name `姓名` ,dept_id 學(xué)院id FROM student WHERE s_id>=2;
#模糊查詢 *
mysql> select * from student where name like '小%';
mysql> select * from student where name like '小_';
mysql> select * from student where name like '%小%';
% 多個(gè)字(任意個(gè));
_ 一個(gè)字
#邏輯運(yùn)算符 or and
# or
select * from student where name like '小%' or name like '張%';
# and
select * from student where name like '小%' and s_id >2;
# 判斷為null,不用 = 嗓袱,只能用 is is not
select * from student where dept_id is null;
select * from student where dept_id is not null;
排序ORDER BY
ASC
升序(默認(rèn)) DESC
降序
#查詢學(xué)生的選修表(中間表)
mysql> SELECT * FROM `select`;
#按學(xué)生學(xué)號(hào)升序輸出
mysql> SELECT * FROM `select` ORDER BY `s_id`;
select s_id 學(xué)生,c_id 課程 from `select` order by s_id asc;
#按課程id降序輸出:
mysql> SELECT * FROM `select` ORDER BY `c_id` DESC;
去重distinct
select distinct columns FROM tb_name;
select distinct subject_number as number from grads; #查看不重復(fù)的number
select distinct gradName from student; #查看有幾個(gè)年級(jí)
限制顯示數(shù)據(jù)的數(shù)量LIMIT
# 分頁籍救。
#按學(xué)生學(xué)號(hào)升序輸出的前4條數(shù)據(jù)
mysql> SELECT * FROM `select` ORDER BY `s_id` LIMIT 4; # (0,4) 從 索引為0渠抹, 往后面拿4條
#指定的返回的數(shù)據(jù)的位置和數(shù)量
mysql> SELECT * FROM `select` ORDER BY `s_id` LIMIT 4,4; # (4蝙昙,4) 從 索引為4, 往后面拿4條
聚合
常用聚合函數(shù) | 描述 |
---|---|
COUNT(column) |
統(tǒng)計(jì)個(gè)數(shù) |
MAX(column) |
最大值 |
MIN(column) |
最小值 |
SUM(column) |
求和 |
AVG(column) |
平均值 |
GROUP_CONCAT(column) |
列出字段全部值 |
select count(*) from student; #統(tǒng)計(jì)有幾條數(shù)據(jù)
select max(age) from student; #求年齡最大值
select avg(age) from student; #求平均年齡
select group_concat(age) from student; #顯示字段所有值
聚合過濾 having
對(duì)聚合出來的數(shù)據(jù)進(jìn)行過濾梧却。
#where不可以使用別名奇颠, having可以使用
select age from student where age>20; #查看age>20的字段
select age as new from student where new>20; #錯(cuò)誤 不能使用別名,
select age as new from student where age>20; #使用原來的名字可以
select age as new from student having new>20; #having可以使用別名
select age as new from student having age>20; #也可以使用原來的名字
#where不能操作聚合函數(shù)放航, having可以
select gradName, count(age) from student group by gradName; #查看每個(gè)年級(jí)有多少人
select gradName, count(age) from student where count(age)>3 group by gradName;
#報(bào)錯(cuò)烈拒, where不能操作聚合函數(shù)
select gradName, count(age) from student group by gradName having count(age)>3;
#having可以操作聚合函數(shù)
#where和having組合使用
select gradName, count(age) from student where age>18 group by gradName;
#統(tǒng)計(jì)每個(gè)年級(jí)age>18的有多少人
select gradName, count(age) from student where age>18 group by gradName having gradName='一年級(jí)';
#統(tǒng)計(jì)一年級(jí)age>18的有多少人
分組查詢GROUP BY
在分組的情況下,只能出現(xiàn)聚合列和分組列
select distinct gradName from student;
#查看總共有幾個(gè)年級(jí)
SELECT gradName, count(name)as count FROM student GROUP BY gradName;
#查找每個(gè)年級(jí)有多少人
SELECT gradName, GROUP_CONCAT(name) FROM student group by gradName;
#查看每個(gè)年級(jí)有哪些人
SELECT gradName,name FROM student group by gradName;
#出現(xiàn)其他字段广鳍,報(bào)錯(cuò)
## 一般跟聚合函數(shù);group by就是用來分組的缺菌,不能再查出單個(gè)的;最多單獨(dú)顯示字段是根據(jù)分組的字段搜锰,其他字段需要利用聚合函數(shù)來顯示伴郁;
#對(duì)學(xué)生表中學(xué)院欄進(jìn)行分組,并統(tǒng)計(jì)學(xué)院的學(xué)生人數(shù):
mysql> SELECT dept_id AS 學(xué)院id,count(dept_id) AS 學(xué)生個(gè)數(shù) FROM student GROUP BY `dept_id` ;
+----------+--------------+
| 學(xué)院id | 學(xué)生個(gè)數(shù) |
+----------+--------------+
| 1 | 1 |
| 3 | 2 |
| 4 | 1 |
+----------+--------------+
3 rows in set (0.00 sec)
select * from student order by dept_id;
## 不能這么寫
# select s_id , age ,sex from stu_details group by sex
# group by 只能跟聚合函數(shù)一起用蛋叼, 一般用 做統(tǒng)計(jì)
select sex , MAX(age) from stu_details group by sex
# 裝B
select dept_id,group_concat(s_id,name separator ',') from student group by `dept_id`;
3 | 2小紅,3小花,6劉三
select dept_id,group_concat(s_id,' ',name separator ',') from student group by `dept_id`;
HAVING分組條件
HAVING 后的字段必須是SELECT后出現(xiàn)過的
mysql> SELECT dept_id AS 學(xué)院id,count(dept_id) AS 學(xué)生個(gè)數(shù) FROM student GROUP BY `dept_id` HAVING 學(xué)生個(gè)數(shù)=1;
+----------+--------------+
| 學(xué)院id | 學(xué)生個(gè)數(shù) |
+----------+--------------+
| 1 | 1 |
| 4 | 1 |
+----------+--------------+
2 rows in set (0.01 sec)
區(qū)別:
where 帶著條件 去表里面焊傅,刪選內(nèi)容, (table)
having :select 出來了結(jié)果狈涮,在進(jìn)行一次刪選狐胎。
有g(shù)roup by 時(shí),having在group by 條件的后面歌馍,而where 在group by的前面握巢。
子查詢
出現(xiàn)在其他SQL語句內(nèi)的SELECT字句。
1)嵌套在查詢內(nèi)部
2)必須始終出現(xiàn)在圓括號(hào)內(nèi)
3)可以包含多個(gè)關(guān)鍵字或條件
### 把別人的結(jié)果松却,當(dāng)成數(shù)據(jù)暴浦,直接拿過來用溅话。
# 求出學(xué)生的平均年齡
SELECT AVG(`age`) FROM `stu_details`;
#查找出大于平均年齡的數(shù)據(jù)
mysql> SELECT * FROM `stu_details` WHERE `age`>18.25;
#將平均數(shù)的SQL語句作為子查詢放入上一條語句中
mysql> SELECT * FROM `stu_details` WHERE `age`>(SELECT AVG(`age`) FROM `stu_details`);
##需求: 要查找,計(jì)算機(jī)和外國(guó)語 的學(xué)生
select id from department where name in ('計(jì)算機(jī)','外國(guó)語');
select * from student where dept_id in (select id from department where name in ('計(jì)算機(jī)','外國(guó)語') );
# 返回多行的子查詢用in 歌焦, not in
select * from student where dept_id not in (1,3);
select * from student where dept_id in (1,3);
聯(lián)表查詢
內(nèi)連接[INNER| CROSS] JOIN
無條件內(nèi)連接:
無條件內(nèi)連接飞几,又名交叉連接/笛卡爾連接
第一張表種的每一項(xiàng)會(huì)和另一張表的每一項(xiàng)依次組合 #每一個(gè)人握一次手;
有條件內(nèi)連接:
在無條件的內(nèi)連接基礎(chǔ)上独撇,加上一個(gè)ON子句
當(dāng)連接的時(shí)候屑墨,篩選出那些有實(shí)際意義的記錄行來進(jìn)行拼接
在寫條件時(shí)注意兩張表的列名是否一樣,
如果時(shí)一樣的則要在前面加上表名纷铣,tb_name.colname這種形式存在
#無條件內(nèi)連接:
mysql> SELECT * FROM `student` INNER JOIN `department`;
+------+--------+------+----+-----------+
| s_id | name | dept_id | id | name |
+------+--------+------+----+-----------+
| 1 | 小明 | 1 | 1 | 外國(guó)語 |
| 2 | 小紅 | 3 | 1 | 外國(guó)語 |
| 3 | 小花 | 3 | 1 | 外國(guó)語 |
| 4 | 小新 | 4 | 1 | 外國(guó)語 |
| 1 | 小明 | 1 | 2 | 藝術(shù) |
| 2 | 小紅 | 3 | 2 | 藝術(shù) |
| 3 | 小花 | 3 | 2 | 藝術(shù) |
| 4 | 小新 | 4 | 2 | 藝術(shù) |
| 1 | 小明 | 1 | 3 | 計(jì)算機(jī) |
| 2 | 小紅 | 3 | 3 | 計(jì)算機(jī) |
| 3 | 小花 | 3 | 3 | 計(jì)算機(jī) |
| 4 | 小新 | 4 | 3 | 計(jì)算機(jī) |
| 1 | 小明 | 1 | 4 | 化工 |
| 2 | 小紅 | 3 | 4 | 化工 |
| 3 | 小花 | 3 | 4 | 化工 |
| 4 | 小新 | 4 | 4 | 化工 |
+------+--------+------+----+-----------+
16 rows in set (0.04 sec)
#有條件內(nèi)連接:
mysql> SELECT * FROM `student` INNER JOIN `department`
-> ON dept_id=id;
+------+--------+------+----+-----------+
| s_id | name | dept_id | id | name |
+------+--------+------+----+-----------+
| 1 | 小明 | 1 | 1 | 外國(guó)語 |
| 2 | 小紅 | 3 | 3 | 計(jì)算機(jī) |
| 3 | 小花 | 3 | 3 | 計(jì)算機(jī) |
| 4 | 小新 | 4 | 4 | 化工 |
+------+--------+------+----+-----------+
4 rows in set (0.03 sec)
#需求: 查詢出 學(xué)生姓名卵史,和對(duì)應(yīng)學(xué)院名
mysql> SELECT s.name 姓名, d.name 學(xué)院 FROM `student` s
-> INNER JOIN `department` d
-> ON dept_id=id;
外連接{ LEFT| RIGHT } [OUTER] JOIN
{ LEFT| RIGHT } [OUTER] JOIN
內(nèi)連接和外連接區(qū)別,查詢左右表都有的數(shù)據(jù)搜立,不要左/右中NULL的那一部分程腹,其中有條件內(nèi)連接是匹配連接條件的;
左外連接: (即以左表為基準(zhǔn)儒拂,到右表找匹配的數(shù)據(jù)寸潦,找不到匹配的用NULL補(bǔ)齊。)
兩張表做連接的時(shí)候社痛,在連接條件不匹配的時(shí)候
留下左表中的數(shù)據(jù)见转,而右表中的數(shù)據(jù)以NULL填充
右外連接: (以右表為基準(zhǔn),到左表找匹配的數(shù)據(jù)蒜哀,找不到匹配的用NULL補(bǔ)齊斩箫。)
對(duì)兩張表做連接的時(shí)候,在連接條件不匹配的時(shí)候
留下右表中的數(shù)據(jù)撵儿,而左表中的數(shù)據(jù)以NULL填充
#往學(xué)生表中添加數(shù)據(jù)乘客,只添加名字
mysql> INSERT INTO student(name)
-> VALUES('xixi');
Query OK, 1 row affected (0.11 sec)
#查看所有學(xué)生表數(shù)據(jù)
mysql> SELECT * FROM student;
+------+--------+------+
| s_id | name | dept_id |
+------+--------+------+
| 1 | 小明 | 1 |
| 2 | 小紅 | 3 |
| 3 | 小花 | 3 |
| 4 | 小新 | 4 |
| 5 | xixi | NULL |
+------+--------+------+
5 rows in set (0.00 sec)
#使用內(nèi)連接加條件只能看到有分配好學(xué)院的學(xué)生的信息;
mysql> SELECT * FROM student INNER JOIN department
-> ON dept_id=id;
+------+--------+------+----+-----------+
| s_id | name | dept_id | id | name |
+------+--------+------+----+-----------+
| 1 | 小明 | 1 | 1 | 外國(guó)語 |
| 2 | 小紅 | 3 | 3 | 計(jì)算機(jī) |
| 3 | 小花 | 3 | 3 | 計(jì)算機(jī) |
| 4 | 小新 | 4 | 4 | 化工 |
+------+--------+------+----+-----------+
4 rows in set (0.02 sec)
#使用左連接把學(xué)生的數(shù)據(jù)全取出來淀歇,該學(xué)生沒有學(xué)院信息的用NULL填充
mysql> SELECT * FROM student LEFT JOIN department
-> ON dept_id=id;
+------+--------+------+------+-----------+
| s_id | name | dept_id | id | name |
+------+--------+------+------+-----------+
| 1 | 小明 | 1 | 1 | 外國(guó)語 |
| 2 | 小紅 | 3 | 3 | 計(jì)算機(jī) |
| 3 | 小花 | 3 | 3 | 計(jì)算機(jī) |
| 4 | 小新 | 4 | 4 | 化工 |
| 5 | xixi | NULL | NULL | NULL |
+------+--------+------+------+-----------+
5 rows in set (0.00 sec)
#使用右外連接把目前還沒有學(xué)生的學(xué)院的數(shù)據(jù)也顯示出來
mysql> SELECT * FROM student RIGHT JOIN department
-> ON dept_id=id;
+------+--------+------+----+-----------+
| s_id | name | dept_id | id | name |
+------+--------+------+----+-----------+
| 1 | 小明 | 1 | 1 | 外國(guó)語 |
| 2 | 小紅 | 3 | 3 | 計(jì)算機(jī) |
| 3 | 小花 | 3 | 3 | 計(jì)算機(jī) |
| 4 | 小新 | 4 | 4 | 化工 |
| NULL | NULL | NULL | 2 | 藝術(shù) |
+------+--------+------+----+-----------+
5 rows in set (0.00 sec)
mysql>
# 需求: 作為班主任易核,我想看到,學(xué)生的 ( 姓名浪默,選的課程名牡直,所屬學(xué)院 )
select s.name, c.name,d.name from `student` s
left join `select` se on se.s_id = s.s_id
left join course c on se.c_id = c.id
left join department d on s.dept_id = d.id;
##1.
select s.name,d.name from student s left join department d on s.dept_id=d.id;
##2.學(xué)生選的課(名稱)
select se.s_id ,c.name from `select` se left join course c on se.c_id = c.id;
select s.name, d.name, c.name from student s
left join department d on s.dept_id = d.id
left join `select` se on s.s_id = se.s_id
left join course c on se.c_id = c.id;
select s.name ,GROUP_CONCAT(c.name SEPARATOR ',') 課程,d.name from `student` s
left join `select` se on s.s_id = se.s_id
left join `course` c on se.c_id = c.id
left join `department` d on s.dept_id = d.id
group by s.name,d.name ;
+--------+-------------------------------+-----------+
| name | 課程 | name |
+--------+-------------------------------+-----------+
| xixi | NULL | NULL |
| 小新 | 心理學(xué),佛學(xué),音樂鑒賞 | 化工 |
| 小明 | 佛學(xué),音樂鑒賞 | 外國(guó)語 |
| 小紅 | 音樂鑒賞,心理學(xué) | 計(jì)算機(jī) |
| 小花 | NULL | 計(jì)算機(jī) |
+--------+-------------------------------+-----------+
#需求: 作為宿管, 學(xué)生的 ( 姓名纳决, 年齡碰逸,性別,所屬學(xué)院)
select s.name, stu.age,stu.sex,d.name from student s
left join `stu_details` stu on s.s_id = stu.s_id
left join `department` d on s.dept_id = d.id;
+--------+------+------+-----------+
| name | age | sex | name |
+--------+------+------+-----------+
| 小明 | 18 | 男 | 外國(guó)語 |
| 小紅 | 19 | 男 | 計(jì)算機(jī) |
| 小花 | 16 | 女 | 計(jì)算機(jī) |
| 小新 | 20 | 女 | 化工 |
| xixi | NULL | NULL | NULL |
+--------+------+------+-----------+
事務(wù)
事務(wù): 是數(shù)據(jù)庫運(yùn)行中的一個(gè)邏輯工作單位阔加。
#原子性
事務(wù)必須是原子工作單元饵史;對(duì)于其數(shù)據(jù)修改,要么全都執(zhí)行,要么全都不執(zhí)行胳喷。
#一致性
事務(wù)在完成時(shí)湃番,必須使所有的數(shù)據(jù)都保持一致狀態(tài)。
#隔離性
由并發(fā)事務(wù)所作的修改必須與任何其它并發(fā)事務(wù)所作的修改隔離厌蔽。
為了保證數(shù)據(jù)庫記錄的更新從一個(gè)一致性狀態(tài)變更為另一個(gè)一致性狀態(tài)
使用事務(wù)來處理是非常必要牵辣。
例:
創(chuàng)建一張銀行賬戶的表
mysql> CREATE TABLE `account`(
-> `id` INT PRIMARY KEY AUTO_INCREMENT,
-> `name` VARCHAR(20) NOT NULL,
-> `balance` INT
-> );
Query OK, 0 rows affected (0.52 sec)
添加兩個(gè)用戶及用戶的存款的信息
mysql> INSERT INTO `account`(`name`,`balance`)
-> VALUES('張三',10000),
-> ('小明',2000)
-> ;
Query OK, 2 rows affected (0.09 sec)
Records: 2 Duplicates: 0 Warnings: 0
假設(shè)現(xiàn)在用戶小明在商店買了500元東西摔癣,現(xiàn)在要轉(zhuǎn)賬給商店奴饮,那么就需要從小明的賬戶上減去500,然后在商店的用戶上加上500择浊,但是如果在減500的過程中出現(xiàn)了系統(tǒng)故障戴卜,再重新啟動(dòng)后發(fā)現(xiàn)小明的錢扣了,但商店卻沒有收到琢岩,這時(shí)候就會(huì)出現(xiàn)數(shù)據(jù)變動(dòng)不一致投剥。對(duì)于這種數(shù)據(jù)的修改我們需要的就是要么同時(shí)修改成功,要么同時(shí)修改失敗担孔,所以這就需要用事務(wù)來進(jìn)行出來江锨。
START TRANSACTION:開始一個(gè)新的事務(wù)
COMMIT:提交當(dāng)前事務(wù),做出永久改變
ROLLBACK:回滾當(dāng)前事務(wù)糕篇,放棄修改
mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)
mysql> UPDATE `account`
-> SET `balance`= `balance`-500
-> WHERE `name` ='小明'
-> ;
Query OK, 1 row affected (0.04 sec)
Rows matched: 1 Changed: 1 Warnings: 0
使用ROLLBACK;使數(shù)據(jù)的修改不生效啄育,回到事務(wù)前的狀態(tài):
mysql> ROLLBACK;
Query OK, 0 rows affected (0.06 sec)
做一次正確的操作:
mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)
mysql> UPDATE `account`
-> SET `balance`=`balance`-500
-> WHERE `name`='小明'
-> ;
Query OK, 1 row affected (0.03 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> UPDATE `account`
-> SET `balance`=`balance`+500
-> WHERE `name`='張三'
-> ;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> SELECT * FROM `account`;
mysql> COMMIT;
Query OK, 0 rows affected (0.07 sec)
當(dāng)COMMIT后,數(shù)據(jù)修改成功拌消,ROLLBACK也沒法回到之前了挑豌。
mysql> ROLLBACK;
Query OK, 0 rows affected (0.00 sec)
作業(yè)
#1 查出學(xué)生詳情表,性別為男,并同時(shí)年齡大于18的
select * from stu_details where sex='男' and age>18;
#2 根據(jù)上述的結(jié)果,查出學(xué)生表對(duì)應(yīng)的姓名
select s.name from student s
inner join stu_details d
on s.s_id=d.s_id
and d.sex='男' and d.age>18;
#3 將學(xué)生通過性別進(jìn)行分組墩崩, 統(tǒng)計(jì)出各組的人數(shù)氓英,并得出每組的年齡的平均值
select sex 性別,count(*) 各組人數(shù),avg(age) from stu_details group by sex;