SQL原生语句

本文详细介绍了SQL原生语句,包括创建数据库、表,插入数据,清空数据表等基本操作,以及复杂的Group By分组、聚集函数如COUNT()、SUM()等的使用,还涉及HAVING、ORDER BY、LIMIT、JOIN和LEFT JOIN等内容,是SQL初学者的入门指南。
摘要由CSDN通过智能技术生成

SQL原生语句

创建数据库

CREATE DATABASE db;

创建表

CREATE TABLE stu(id int primary key, name char(10), classid int);

插入数据

INSERT INTO stu(id, name, classid) VALUE (4, "招新4", 10), (5, "招新5", 20), (6, "招新6", 10);

清空数据表

TRUNCATE TABLE stu;

起始

一条完整的SQL语句所包含的

select ... from ... where ... group by ... having ... order by ... limit ...
语句作用顺序说明补充备注
select输出4查询结果输出字段
from获取数据1查询到的表
where过滤2对结果进行条件过滤AND,OR,!=从from中接收的信息
group by分组3对结果按照字段进行分组如果遇到Select则输出每一组的第一行,可以和聚集函数放在一起
having过滤5作用与 group by 之后的过滤条件写在语句group by之后
order by排序6DESC ASC
limit限定个数7

Group By

  • 将查询到的结果按照指定的字段进行分组,将分组后的数据的第一行数据进行输出,具体输出的信息通过 Select 指定的字段

版本5.7出现问题解决

SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

若还不行可尝试执行如下sql

set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

count(1)

  • 输出当前分组内的数据的数量,相当于每一行数据都新增一个字段 tmp,值为 1
SELECT `url`, count(1) FROM page_permission GROUP BY `url`

count(对应字段)

  • 如果字段中有null,则为 null 的数据不会被统计进count的数量中,这个是与Count(1)的唯一的区别
SELECT `url`, count(`name`) FROM page_permission GROUP BY `url`

count(DISTINCT 对应字段)

  • 在distinct 指定的字段中进行去重操作后的数量,null也会被当作一种值类型参与到不同结果的统计
SELECT `url`, count(DISTINCT `name`) FROM page_permission GROUP BY `url`

多列的分组

  • 多个条件作用
SELECT `url` FROM page_permission GROUP BY `url`, `name`

聚集函数

COUNT()

  • 计数

SUM()

  • 求和

MAX()

  • 最大值

MIN()

  • 最小值

AVG()

  • 平均值

GROUP_CONCAT()

  • 字符串集合

having

作用在 group by 之后的过滤

SELECT room_num, COUNT(1) as n FROM account_base GROUP BY `room_num` HAVING n > 5

如果参与having过滤的结果不需要输出,则可以把聚合函数放在having中执行

SELECT room_num FROM account_base GROUP BY `room_num` HAVING COUNT(1) > 5

order by

排序

SELECT  id, room_num, COUNT(1) as n FROM account_base GROUP BY `room_num` HAVING n > 5 ORDER BY room_num

limit

切片

SELECT  id, room_num, COUNT(1) as n FROM account_base GROUP BY `room_num` HAVING n > 5 ORDER BY room_num limit 4, 10

第二节

case when end

用在select中,根据条件生成一列新的数据,如果没有指定 as 这当前列名会以当前查询语句作为列名,一般使用 case 的时候使用 as 重命名当前列名,通过判断语句可以得到当前列将会输出的内容,也可以与聚合函数一起控制数据

语句

case 
    when 表达式
        then 输出
    when 表达式
        then 输出
    else
        输出
end

简单的case函数

SELECT id, code,
(
CASE code_type
    WHEN 1 then "这是1"
    WHEN 0 then "这是0"
    ELSE "啥也不是"
END
) as A
FROM code_base

case搜索函数

SELECT id, parent_code,
(
CASE 
    WHEN code_type = 1 then "这是1"
    WHEN code_type = 0 then "这是0"
    ELSE "啥也不是"
END
) as A
FROM code_base

case then 和 聚集函数

SELECT name, 
MAX((
CASE stage
	WHEN "基础" THEN `source`
	ELSE NULL
END
) ) as "基础",
MAX((
CASE stage
	WHEN "爬虫" THEN `source`
	ELSE NULL
END
) ) as "爬虫",
MAX((
CASE stage
	WHEN "SQL" THEN `source`
	ELSE NULL
END
)) as "SQL"
FROM stu GROUP BY `name`

Join

连接:做两个表之间的关系

FROM 表A A join 表B B on 条件 WHERE
select * from 表A A join 表B B on a.id = b.id;

join

如果没有 on 判断条件,join会将 表A 和 表B 的所有数据进行乘级拼装

left join

左连查询

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值