SQL笔记整理(宝典)

**.语句书写顺序**
select:输出 (以列为单位)
from:获取数据
where:过滤 (一条条过滤,判断from中的信息,过滤列)
group by:分组
having:过滤
order by:排序
limit:限定个数 

**.语句执行顺序**
from:获取数据
where:过滤
group by:分组
select:输出
having:过滤
order by:排序
limit:限定个数

**.逐个分析**

 1. select
 直接写出要输出列的名称,如果输出全部列则直接写*号,重命名列用as.
 
>  聚合函数(放在select后面)
 计数:count
 count:同一分组的行数和
 count(name):name的行数不去重
 count(distinct name):name的行数去重
 distinct只能放在第一个字段中,作用于后面的所有字段,而不只是distinct紧跟着的那个字段
 求和:sum
 最大值:Max
 最小值:min
 平均值:min
 字符串集合:group...concat

 2.from
 获取数据的表名称
 
 3. where
 过滤from中获取的数据,保留符号条件的数据
 
 4. group by
 对行进行分组
 分组的目的是进行聚合
 默认排序是升序:ASC
 降序是:DESC

 例:group by classid ,按照classid进行分组,若遇到select,那么输出的是每一组的第一行数据,还可以和聚合函数放在一起。

 5. havinggroup by 之后的过滤,对输出结果进行过滤,在select之后执行

 6. order by
 以列为基础进行排序,可多列进行排序

 7. limit
 例:limit 2 前两行
    limit 121开始取两个
    
 
**.创建表格的写法**
1.创建数据库:create database 数据库名称
2.创建表:create table 表的名称
3.插入数据:insert into 列的名称 values 数据
例如:insert into (id,name,classid) values (1,'王‘,204.清空数据表:truncate 表的名称

**.聚合函数和case when**
1.
case when 表达式
then      输出
when      表达式
then      输出
else      输出
end
2.
if 表达式
   输出
elif 表达式
     输出
else 输出

六.join 连接.  (放在from之后)
连接两个或两个以上的表用jion和jion on 
1.join: 将两表数据整合到一个新表中
2.join on : on后面可以加一些限制条件
3.left join :必须有on条件,会检查左边表的数据是否包含在新生成的表中。若是,则与join没区别;若否,用null与不包含的行组成新行加入新表。(作用:可查出一些为空的信息)
4.right join :A left join B = B right join A
5.多表连接:
A join B join C join D
A join B on .... join C  on .... join D on ....
(A join B join on ....) join  (C join D on ....) on 
A left join B on ... left join C join on ....
 
**.子查询**
若在whereselect中时相当于子查询,先计算子查询的结果,后判断。
1.where子查询:
select name from stu
where classid = (select id from class where manager = "小蓝“)

2.select子查询:
select id,(select id from class where manager = "小蓝“)
from stu

注:=的子查询只能返回一个数字,in的子查询可以返回一列数字

3.from子查询:
select stu.name
from stu jion (select * from class where manager = "小蓝"as c on stu.classid = c.id

注:from里的子查询必须有别名
   子查询可用jion替换
   

4.半连接
半连接:依赖于复查询的子查询
作用:找到每个classid中最大的id所对应的信息
例:
select * from stu as s1
where id = 
(select max(id) from stu as s2 where classid = s1.classid )

**八、分组排序函数 Row_number(重点)**
1.无分组排序
row_number() over(order by 字段 desc)
例 row_number() over(order by 学生成绩 desc)
表示不分班级,所有学生成绩由高到低排序
2.分组排序
row_number() over(PARTITION by 字段1 order by 字段2 desc)
例 row_number() over(PARTITION by 班级 order by 学生成绩 desc)
表示根据班级分组,并在每个班级内按学生成绩由高到低排序

**九 组合查询 unionunion all**
用法:将两个表纵向直接连接
语法:
select 字段 from 表名
union
select 字段 from 表名

union  去重
union all 不去重
**.总结**
对数据库有修改的操作是:增删改
对数据库没有修改的操作是:查(SQL最主要的操作)


mysql 数据库基础知识
一、字符串连接
concat()用于连接两个或多个字符串
ifnull(字段名,值1):如果字段对应的值为null,则用值1代替null
isnull(字段名):判断字段的值是否为null,为null返回0,不为则返回1.条件筛选 where
1.关系筛选:>,<2.逻辑筛选:and or not 
3.模糊筛选:like ,between...and...,in , is null,is not null
三、文本处理函数
1.获取字符串占用的字节长度 select
  LENGTH('中国') ;
 
2.连接字符串函数
CONCAT(first_name, ' ', last_name)

3.把字母转大写函数
UPPER(first_name)

4.把字母转小写函数
LOWER(first_name)

5.截取子字符串函数,第一个参数为截取的位置,从 1 开始,第二参数为待截取字符的个数,如果没有第二个参数则截取到字符串末尾。
  SUBSTR('Hello world!', 2) ;
 
  SUBSTR('Hello world!', 7, 5) ;
 
6.返回子字符串第一次出现的位置,没有返回 0

  INSTR('Hello world!', 'world') ;
 
7.去除字符串两边多余的空格

  TRIM('   Hello world!    ') ;

四、数值处理函数
# 四舍五入函数, 第二个参数表示小数点后保留几位
SELECT ROUND(1.56);
SELECT ROUND(1.56, 1);
 
# 向上取整
SELECT CEIL(1.34);
 
# 向下取整
SELECT FLOOR(1.34);
 
# 截断
SELECT TRUNCATE(1.2345, 2);
 
# 取余, 结果 = x - x/y*y
SELECT MOD(10, 3);
SELECT MOD(-10, 3);

五、日期和时间处理函数
# 获取日期和时间
SELECT NOW();
 
# 获取日期
SELECT CURDATE();
 
# 获取时间
SELECT CURTIME();
 
# 获取指定的部分:年、月、日、小时、分钟、秒
SELECT YEAR(NOW());
SELECT MONTH(NOW());
 
# 月份字符表示
SELECT MONTHNAME(NOW());
 
# 从 0 开始, 0 为星期一
SELECT WEEKDAY(NOW());
# 从 1 开始, 1 是星期天
SELECT DAYOFWEEK(NOW());
 
SELECT DAY(NOW());
SELECT HOUR(NOW());
SELECT MINUTE(NOW());
SELECT SECOND(NOW());

六、DML 
1.插入

# 语法一
insert into 表名[(字段列表)] values(值列表)
 
# 语法二
insert into 表名
set 字段1 =1,
...
字段n = 值n;

2.更新
# 修改单表记录,没有筛选条件则更新所有记录
update 表名
set 字段1 =1...
    字段n = 值n
where 筛选条件;
 
# 修改多表记录
# sql92 语法
update 表名1 别名1, ...2 别名n
set 字段1 =1...
    字段n = 值n
where 连接条件 and 筛选条件;
 
# sql99 语法
update 表名1 别名1 [inner|left|right]
join  表名2 别名2
on 连接条件1
...
join  表名n 别名n
on 连接条件n-1
set 字段1 =1...
    字段n = 值n
where 筛选条件;

3.删除
delete from 表名
where 筛选条件;
 
delete 别名1, ..., 别名n
from 表名1 别名1, ..., 表名n 别名n
where 连接条件 and 筛选条件;
 
delete 别名1, ..., 别名n
from 表名1 别名1 [inner|lefet|right]
join  表名2 别名2
on 连接条件1
...
join  表名n 别名n
on 连接条件n-1
where 筛选条件;
 
truncate table 表名;

  • 3
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值