04 mysql 基础三 (进阶)
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 基础三 (进阶)的更多相关文章
- 01 mysql 基础一 (进阶)
mysql基础一 1.认识mysql与创建用户 01 Mysql简介 Mysql是最流行的关系型数据库管理系统之一,由瑞典MySQLAB公司开发,目前属于Oracle公司. MySQL是一种关联数据库 ...
- 02 mysql 基础二 (进阶)
mysql 基础二 阶段一 表约束 1.not null 非空约束 例子: create table tb1( id int, name varchar(20) not null ); 注意 空字符不 ...
- mysql基础sql进阶
回顾前面的基础命令语句 修改数据表 添加字段: alter table 表名 add 字段名 列类型[not null|null][primary key][unique][auto_incremen ...
- mysql基础(三)——中级查询
创建表 CREATE TABLE DEPT( DEPTNO ) PRIMARY KEY, DNAME ) , LOC ) ) ; ,'ACCOUNTING','NEW YORK'); ,'RESEAR ...
- mysql基础三(视图、触发器、函数、存储过程、事务、防注入)
一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. 1.创建视图 -格式:CREATE ...
- MySQL 基础三 函数(聚合、字符串、时间、条件判断)
1.聚合 其它:GROUP_CONCAT.avg.sum.count.max.min SELECT typeid,GROUP_CONCAT(goodsname) FROM `goods` GROUP ...
- Mysql基础(三)
#DML语言 /* 数据操作语言 插入:insert insert into 表名(列名,...) values(值1,...); insert into 表名 set 列名=值, 列名=值,... ...
- python进阶08 MySQL基础补充
python进阶08 MySQL基础补充 本次课程都是基于三张表格的使用 一.子查询 #如何找到‘张三’的成绩 #思路:先找到张三的学号,在拿这个张三的学号到成绩表里面去匹配,得出成绩 #如何用一条查 ...
- MySQL基础(三)——约束
MySQL基础(三)--约束 约束是在表上强制执行的数据校验规则,主要用于维护表中数据的完整性以及当数据之间有以来关系时,保护相关的数据不会被删除. 根据约束对列的限制,可以划分为:单列约束(只约束一 ...
随机推荐
- JS 排序:冒泡、 二分搜索 /折半搜索 half-interval search
冒泡排序: 重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来. var arr = [5,0,-56,900,12]; //大的排序次数 for(var i=0; i& ...
- June 14th 2017 Week 24th Wednesday
Love looks not with the eyes, but with the mind. 爱,不在眼里,而在心中. Staring in her eyes and you will find ...
- ubuntu git svn 缺少 subversion-perl
在命令行中输入以下命令:sudo apt-get install subversion-tools等待安装成功即可.
- VS中添加预处理宏的方法
VS中添加预处理宏的方法 除了在.c及.h中添加宏定义之外,还可以采用如下方法添加宏定义: 1.若只需要定义一个宏(如#define DEBUG),可以右键点击工程-->属性-->c/c+ ...
- 【luoguP1563】【2016NOIP-High】玩具迷题
P1563 玩具谜题 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业. 有一天, 这些玩具小人把小南的眼镜藏了起来. 小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外.如下图: ...
- HDU 1159 Common Subsequence(裸LCS)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1159 Common Subsequence Time Limit: 2000/1000 MS (Jav ...
- c#中关于结构体和字节数组转化
最近在使用结构体与字节数组转化来实现socket间数据传输.现在开始整理一下.对于Marshal可以查阅msdn,关于字节数组与结构体转代码如下: using System; using System ...
- ## `nrm`的安装使用
作用:提供了一些最常用的NPM包镜像地址,能够让我们快速的切换安装包时候的服务器地址:什么是镜像:原来包刚一开始是只存在于国外的NPM服务器,但是由于网络原因,经常访问不到,这时候,我们可以在国内,创 ...
- SpringMVC 导入导出Excel文件
/** * 下载Excel模板 创建一个新的文件用于下载,创建的文件放在缓存中 * * @param request * @param response */ /* * @Request ...
- mysql快速导入导出数据
--导入 select * from inhos_genoperation(表名) where UPLOAD_ORG_CODE='***' into outfile '/tmp/inhos_genop ...