配套视频:老杜带你学_mysql入门基础(mysql基础视频+数据库实战) 补充视频(带师兄课程):https://www.bilibili.com/video/BV1ZM4y1u7uF?p=4
戴师兄使用的是sqlzoo数据集:https://sqlzoo.net/wiki/SQL_Tutorial
笔记参考:https://mubu.com/doc/4VC7JuHlj6H
目录太多懒得调整,后续慢慢调整吧
mysql日期函数:https://blog.youkuaiyun.com/weixin_44641729/article/details/103793995
文章目录
- 一、DB,DBMS,SQL关系
- 二、MYSQL常用命令
- 三、 SQL语句分类
- 1. 简单查询
- 2.条件查询
- null格式要区分,null是字符串格式的null单词,< null >才是真正的空值,这时候isnull没有办法将其查出
- 综合案例:
- 2.数据处理函数/单行处理函数
- 分组函数\多行处理函数
- 分组查询(group by)
- 分组查询后筛选关键字(having)
- 单表查询:关键字执行顺序
- 关键字书写循序
- 综合案例3
- 去除重复记录关键字distinct
- 窗口语句(over)
- 连接查询
- union关键字 合并查询结果集
- 关键字limit使用,将查询结果集一部分取出!!!!!
- 分页(要背)
- DQL语句总结
一、DB,DBMS,SQL关系
DB是数据库
DBMS是数据库管理系统
SQL是数据库语言
通过DBMS执行SQL语言达到管理数据库目的
DBMS有:
MySQL
db2
sybase
oracle
二、MYSQL常用命令
登录数据库:mysql -uroot -p123456
退出数据库:exit
###########################################
mysql:不见分号不执行(终止语句用“\c”)
查看有哪些数据库:show databases; (以分号结尾)
选择使用某个数据库: use xxx ; eg:use test;
创建数据库:create xxxx; eg:creat bjpowernide;
查看数据库中有哪些表:show tables;
查看数据库版本号:select version();
查看当前使用的是哪个数据库:select database();
SQL语句通用语法
所有sql语句以分号结尾
所有sql语句不区分大小写
所有sql语句中字符串是用单引号,双引号在oracle中是用不了的
数据库中的基本单元:表 table
查看数据库下表:mysql> show tables;
·数据库中是以表来储存数据的,表较为直观且每一行都有行和列
行(row):数据/字段
列(colum):字段 ,每一个字段都有字段名,数据类型和约束条件等属性
三、 SQL语句分类
DQL:数据查询语言(凡是带有select关键字的都是查询语句)
DML:数据操作语言(凡是对标志那个数据进行增删改的都是DML)
insert 增
delete 删
updata 改
DDL:数据定义语言(凡是带有oreate、drop、alter的都是DDL,DDL主要操作的是表的结构,不是表数据,eg:删除某个字段)
creat 新建
drop 删
alter 改
TCL:事物控制语言
commit 事务提交
rollback 事物回滚
DCL:数据控制语言,如授权grant,撤销权限revoke
1. 简单查询
1.查看表中数据(快速查看全表数据) select*from 表名;
缺点:效率低,可读性差
mysql> select * from dept;
+--------+------------+----------+
| DEPTNO | DNAME | LOC |
+--------+------------+----------+
| 10 | ACCOUNTING | NEW YORK |
| 20 | RESEARCH | DALLAS |
| 30 | SALES | CHICAGO |
| 40 | OPERATIONS | BOSTON |
+--------+------------+----------+
4 rows in set (0.00 sec)
2.不看表中数据,只看表的结构:desc 表名;
mysql> desc dept;(desc是describe的缩写)
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| DEPTNO | int(2) | NO | PRI | NULL | |
| DNAME | varchar(14) | YES | | NULL | |
| LOC | varchar(13) | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
varchar 类型就是string 字符串
3.查询一个字段:select 字段名 from 表名;(查询两个字段用逗号隔开)
mysql> select LOC,deptno from dept;
+----------+--------+
| LOC | deptno |
+----------+--------+
| NEW YORK | 10 |
| DALLAS | 20 |
| CHICAGO | 30 |
| BOSTON | 40 |
+----------+--------+
4 rows in set (0.00 sec)
4.查询列起别名使用 as 关键字
select 语句 不会改变原表的数据字段名,只是改变了显示的名字,select语句是不会进行修改操作的
mysql> select LOC,deptno as no from dept;
+----------+----+
| LOC | no |
+----------+----+
| NEW YORK | 10 |
| DALLAS | 20 |
| CHICAGO | 30 |
| BOSTON | 40 |
+----------+----+
5.查询列参与数学运算(sal*12)(字段可以使用数学表达式)
mysql> select ename,sal*12 from emp;
+--------+----------+
| ename | sal*12 |
+--------+----------+
| SMITH | 9600.00 |
| ALLEN | 19200.00 |
| WARD | 15000.00 |
| JONES | 35700.00 |
| MARTIN | 15000.00 |
| BLAKE | 34200.00 |
| CLARK | 29400.00 |
| SCOTT | 36000.00 |
| KING | 60000.00 |
| TURNER | 18000.00 |
| ADAMS | 13200.00 |
| JAMES | 11400.00 |
| FORD | 36000.00 |
| MILLER | 15600.00 |
+--------+----------+
2.条件查询
查询出符合条件的数据
语法格式:
select
字段1,字段2,. . .
from
表名
where
条件;
条件 | 语句 | 例子 |
---|---|---|
等于、小于、大于,不等号 | =,<,>,!= | eg:select ename,job from emp where sal!=800; / select job,sal from emp where ename=‘ALLEN’; |
大于等于,小于等于 | >=,<= | |
二者之间【闭区间】 | between…and…/ >= and <= | select job,ename from emp where sal between 800 and 2000; |
是否为空值/不为空值 | is null / is not null | selecte name from emp where comm is null; |
并且,或者 | and ,or 【and优先级最高】 | select ename from emp where sal>800 and comm is null;/ from emp where sal>2500 and (deptno=10 or deptno=20); |
包含、不包含 | in,not in【其包含的不是区间,而是具体的值】 | select ename from emp where sal in(800,1600); |
模糊查询 | like(%,下划线,两种特殊符号,一个下划线只匹配一个字符,%表示任意多个字符) | 找出名字中含有o的:select ename from emp where ename like ‘%o%’;找出第三个字母是R的:select ename from emp where ename like ‘__R%’; |
null格式要区分,null是字符串格式的null单词,< null >才是真正的空值,这时候isnull没有办法将其查出
当数据库建设不完备时要注意区分
注1:查询工资大于2500,且部门编号为10或者20的员工,涉及到优先级问题,and优先级比or高,语句先执行and,再执行or
若写为:
select * from emp where sal>2500 and deptno=10 or deptno=20;
将会执行select * from emp where( sal>2500 and deptno=10) or deptno=20;
正确写法:select * from emp where sal>2500 and (deptno=10 or deptno=20);
注2:模糊查询时如果要查具有下划线的名字,那么采用where name like ‘%_%’; 即才下划线前面加上转义字符" \ "
1.排序
1. 升序语法:
select
字段名
from
表名
order by
字段名;
2. 降序语法:
select
字段名
from
表名
order by
字段名