mysql 基础三

阶段一 mysql 单表查询

1.查询所有记录
select *    from department;

select * from student;

select * from student_detail;
2.查询选中列记录
select s_name from student;
3.查询指定条件下的记录
select s_name from student where s_id>2;
4.查询后为列取别名
select s_name as 姓名 from student;
5.模糊查询
select * from student where s_name like '赵%'    # %代表多个字符
select * from student where s_name like '_春_' # _代表一个字符
6.排序 order by : asc升序(默认) desc降序
select * from student order by dept_id;     # 升序

select * from student order by dept_id desc; # 降序
7.限制显示数据的数量LIMIT
# 按学号升序输出前2条数据
select * from student order by s_id limit 2;
# 按学号升序输出 第3条数据后面的2条数据
select * from student order by s_id limit 3,2;
8.常用聚合函数
#求最大年龄
select max(age) from stu_detail;
#求最小年龄
select min(age) from stu_detail;
#求和
select sum(age) from stu_detail;
#求平均数
select avg(age) from stu_detail;
#四舍五入
select round(avg(age)) from stu_detail;
#统计
select count(age) from stu_detail;
9.分组查询 group by
# 对学生表中学院栏进行分组,并统计每个学院各有多少学生
select dept_id 学院,count(dept_id) 学生个数 from student group by dept_id;

# having 分组条件
# having 后的字段必须是select 后出现过的

# 查看哪些学院,只有一个学生
select dept_id 学院,count(dept_id) 学生个数 from student group by dept_id
-> having count(dept_id)=1;

阶段二 musql 子查询

出现在其他SQL语句内的SELECT字句。(select 中 嵌套 select )

# 查出潭州学院中 '软件学院'和'外语学院' 的 id
select tz_id from tanzhou where tz_name='软件学院' or tz_name='外语学院';
+-------+
| tz_id |
+-------+
| 1 |
| 3 |
+-------+
 
# 查出学生表中属于'软件学院' 和 '外语学院' 的学员
select * from student where dept_id in( select tz_id from tanzhou where tz_name='软件学院' or tz_name='外语学院');
+------+--------------+---------+
| s_id | s_name | dept_id |
+------+--------------+---------+
| 1 | 张三 | 3 |
| 3 | 王六 | 1 |
| 6 | 隔壁老王 | 3 |
+------+--------------+---------+

阶段三 mysql 关联查询

1. 内连接 [inner | cross] join
  • 无条件内连接: 又名交叉连接/笛卡尔连接

第一张表种的每一项会和另一张表的每一项依次组合

select * from student inner join tanzhou;
  • 有条件内连接:

    在无条件的内连接基础上,加上一个ON子句

    当连接的时候,筛选出那些有实际意义的记录行来进行拼接

select * from student inner join tanzhou on dept_id=tz_id;
2. 外连接 { lifet | right} join
  • 左外连接: (以左表为基准)

两张表做连接的时候,在连接条件不匹配的时候

留下左表中的数据,而右表中的数据以NULL填充

select * from tanzhou left join student on tz_id=dept_id;

+-------+--------------+------+--------------+---------+
| tz_id | tz_name | s_id | s_name | dept_id |
+-------+--------------+------+--------------+---------+
| 3 | 外语学院 | 1 | 张三 | 3 |
| 2 | 艺术学院 | 2 | 李四 | 2 |
| 1 | 软件学院 | 3 | 王六 | 1 |
| 4 | 语言学院 | 4 | 陈七 | 4 |
| 2 | 艺术学院 | 5 | 郭伟涛 | 2 |
| 3 | 外语学院 | 6 | 隔壁老王 | 3 |
| 5 | 电竞学院 | NULL | NULL | NULL |
+-------+--------------+------+--------------+---------+
  • 右外连接 right join

右外连接: (以右表为基准)

对两张表做连接的时候,在连接条件不匹配的时候

留下右表中的数据,而左表中的数据以NULL填充

select * from student right join tanzhou on tz_id=dept_id;

+------+--------------+---------+-------+--------------+
| s_id | s_name | dept_id | tz_id | tz_name |
+------+--------------+---------+-------+--------------+
| 1 | 张三 | 3 | 3 | 外语学院 |
| 2 | 李四 | 2 | 2 | 艺术学院 |
| 3 | 王六 | 1 | 1 | 软件学院 |
| 4 | 陈七 | 4 | 4 | 语言学院 |
| 5 | 郭伟涛 | 2 | 2 | 艺术学院 |
| 6 | 隔壁老王 | 3 | 3 | 外语学院 |
| NULL | NULL | NULL | 5 | 电竞学院 |
+------+--------------+---------+-------+--------------+
  • 查询没有学员的学院(电竞学员)

select * from student right join tanzhou on tz_id=dept_id where s_id is null;

+------+--------+---------+-------+--------------+
| s_id | s_name | dept_id | tz_id | tz_name |
+------+--------+---------+-------+--------------+
| NULL | NULL | NULL | 5 | 电竞学院 |
+------+--------+---------+-------+--------------+
  • 外连接多张表

    mysql> select s_id,s_name,dept_id,tz_name,deptc_id,c_name from student left join tanzhou on dept_id=tz_id left join course on tz_id=deptc_id;
    
    +------+--------------+---------+--------------+----------+--------+
    | s_id | s_name | dept_id | tz_name | deptc_id | c_name |
    +------+--------------+---------+--------------+----------+--------+
    | 3 | 王六 | 1 | 软件学院 | 1 | python |
    | 2 | 李四 | 2 | 艺术学院 | 2 | java |
    | 5 | 郭伟涛 | 2 | 艺术学院 | 2 | java |
    | 1 | 张三 | 3 | 外语学院 | 3 | c/c++ |
    | 6 | 隔壁老王 | 3 | 外语学院 | 3 | c/c++ |
    | 4 | 陈七 | 4 | 语言学院 | 4 | 外语 |
    +------+--------------+---------+--------------+----------+--------+

04 mysql 基础三 (进阶)的更多相关文章

  1. 01 mysql 基础一 (进阶)

    mysql基础一 1.认识mysql与创建用户 01 Mysql简介 Mysql是最流行的关系型数据库管理系统之一,由瑞典MySQLAB公司开发,目前属于Oracle公司. MySQL是一种关联数据库 ...

  2. 02 mysql 基础二 (进阶)

    mysql 基础二 阶段一 表约束 1.not null 非空约束 例子: create table tb1( id int, name varchar(20) not null ); 注意 空字符不 ...

  3. mysql基础sql进阶

    回顾前面的基础命令语句 修改数据表 添加字段: alter table 表名 add 字段名 列类型[not null|null][primary key][unique][auto_incremen ...

  4. mysql基础(三)——中级查询

    创建表 CREATE TABLE DEPT( DEPTNO ) PRIMARY KEY, DNAME ) , LOC ) ) ; ,'ACCOUNTING','NEW YORK'); ,'RESEAR ...

  5. mysql基础三(视图、触发器、函数、存储过程、事务、防注入)

    一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. 1.创建视图 -格式:CREATE ...

  6. MySQL 基础三 函数(聚合、字符串、时间、条件判断)

    1.聚合 其它:GROUP_CONCAT.avg.sum.count.max.min SELECT typeid,GROUP_CONCAT(goodsname) FROM `goods` GROUP ...

  7. Mysql基础(三)

    #DML语言 /* 数据操作语言 插入:insert insert into 表名(列名,...) values(值1,...); insert into 表名 set 列名=值, 列名=值,... ...

  8. python进阶08 MySQL基础补充

    python进阶08 MySQL基础补充 本次课程都是基于三张表格的使用 一.子查询 #如何找到‘张三’的成绩 #思路:先找到张三的学号,在拿这个张三的学号到成绩表里面去匹配,得出成绩 #如何用一条查 ...

  9. MySQL基础(三)——约束

    MySQL基础(三)--约束 约束是在表上强制执行的数据校验规则,主要用于维护表中数据的完整性以及当数据之间有以来关系时,保护相关的数据不会被删除. 根据约束对列的限制,可以划分为:单列约束(只约束一 ...

随机推荐

  1. 再学UML-Bug管理系统UML2.0建模实例(三)

    3.系统设计 在对系统进行全面分析后,我们开始使用UML对系统进行设计,构造BMS系统的设计模型,包括类图.包图.顺序图(实现模型).组件图和部署图等的绘制,回答了“怎么做”的问题.具体设计工作如下: ...

  2. 怎么看电脑有没有安装USB3.0驱动

    1.首先要看主板是否带USB3.0接口. 2.然后计算机-属性-设备管理器-通用串行总线,就可以看到是否有安装USB3.0驱动    

  3. 点击一个按钮,如何让一个<div id=a>……</div>隐藏或显现?

    <div id=divid>123</div>< button onclick="usr()">Click</button>< ...

  4. google Cayley图谱数据库初试

    一.安装 mkdir cayley cd cayley mkdir src export GOPATH=$(pwd) go get github.com/google/cayley go build ...

  5. 战神CPU计算机硬件组装

    今天本来更新DP常见优化的,但是下午土木学院吴书记找我组装电脑,晚上A题后,临时有一些事情,没来得及整理. 这里分享一下战神CPU(死垃圾)的组装. 一顿操作猛如虎,很艰难的装好机子了,发现吴书记被坑 ...

  6. LA 4015 树形背包

    题目链接:https://vjudge.net/contest/164840#problem/D 题意: 给一棵树,每条边上有一些权值,求 长度不超过 x ,最多能走多少个点: 分析: 考虑每一个节点 ...

  7. NYOJ298 点的变换 【矩阵乘法经典】

    任意门:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=298 点的变换 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 ...

  8. c#用链表存储并读取配置文件(代码部分)

    //读取配置参数 private void loadcofig() { //List<param> camra1 = new List<param>(); List<st ...

  9. markdown的常用高级操作。

    符号 说明 对应编码(使用时去掉空格) 英文怎么说 & AND 符号 & amp; ampersand < 小于 & lt; little 大于 & gt; gr ...

  10. opencv 数据类型转换:CvArr, Mat, CvMat, IplImage, BYTE 转

    留着以后查询: http://blog.csdn.net/augusdi/article/details/8863820 一.Mat类型:矩阵类型,Matrix. 在openCV中,Mat是一个多维的 ...