SQL笔记(结构化查询语句)

一、SQL 能做什么

SQL 具体能完成下面功能:

  • 面向数据库执行查询
  • 可从数据库取回数据
  • 可在数据库中插入新的记录
  • 可更新数据库中的数据
  • 可从数据库删除记录
  • 可创建新数据库
  • 可在数据库中创建新表
  • 可在数据库中创建存储过程
  • 可在数据库中创建视图
  • 可以设置表、存储过程和视图的权限

总结起来,其实就“增删改查”四大功能,但是实际上我们平时用到最多的是查询

二、通用事项

1、SQL分类

2、operator 操作符

常用的有等于 = 、小于 < 、大于 > 、不等于<> 或 !=

3、其他

SQL 语句以 ; 作为结束的标志

table_name 表名

comuln_name 列名

三、DDL 定义语言

1、数据类型

2、数据库操作

3、表操作

需补充

四、增删改查

(1)查询

1、select "A"  输出A

select "A";

2、select column  查询列

在绝大部分时候,不加反引号 ` ` 并不会导致程序出错。但其实我们在命名字段的时候,字段名可能会与 SQL 关键字冲突,这时候要用反引号将列名和表名包含一下,避免关键字冲突。

1)查询单个列

select `name` from `teachers`;

2)查询多个列

SELECT `column_name_1`, `column_name_2`  
FROM `table_name`;

3)查询所有列

select * from `teachers`;

4)查询不同行(distinct 去重)

SELECT DISTINCT `column_name`
FROM `table_name`

3、select where  对行进行筛选过滤

SELECT * from courses
WHERE student_count>1000;

4、group by 分组

其用于结合聚合函数,能根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表

(2)新增 insert into 插入数据

insert into 表(列1,列2..) values(内容1,内容2...)

INSERT INTO 语句用于向表中插入新记录,两种编写形式,第一种形式无需指定列名,第二种形式需要指定列名。

① 无需指定列名

需要为表中的每一列插入数据

注意:vslues( ) 除了 int 数字格式的外,其余的需要用 “ ” 

INSERT INTO `courses` VALUES (13,'Python','400','2021-05-23',3);

返回结果增加(红框)

② 需要指定列名

如果我们只想在指定列中插入数据,那么这种写法会更为方便

INSERT INTO `courses` (`name`, `student_count`, `created_at`, `teacher_id`) 
VALUES ('Flash Sale','100','2018-01-01',5);

(3)修改 update 更新数据

update 表 set 要改的内容 where 限定记录

注意

请注意 UPDATE 语句中的 WHERE 子句!WHERE 子句规定哪条记录或者哪些记录需要更新。如果您省略了 WHERE 子句,所有的记录都将被更新

将教师名 name 为 "Linghu Chong" 的邮箱 email 更新为 'linghu.chong@lintcode.com'

UPDATE `teachers`
SET `email` = 'linghu.chong@lintcode.com'
WHERE `name` = 'Linghu Chong';

(4)删除 delete

删除表中所有数据

delete from column;

五、运算、筛选、排序

(1)比较运算符

operator B

其中 operator 是比较运算符,用于对 A 和 B 进行比较运算。

常用的比较运算符有 =(等于) 、!=(不等于)、 <>(不等于)、<(小于)、<=(小于等于)、>(大于)、>=(大于等于),其中 != 和 <> 在特殊情况下用法是不同的,这里暂时不提。

比较运算符常常与 WHERE 在一起使用。WHERE 用于逻辑判断,WHERE 后面写判断的条件,满足条件的语句会被筛选出来。

WHERE 比较运算符的使用方式如下:A operator B

(2)and 连接多条件

使用 SQL 中的逻辑运算符 AND 可以将 WHERE 子句中两个或两个以上的条件结合起来,其结果是满足 AND 连接的所有条件的数据。

SELECT *
FROM courses
WHERE student_count >= 800 AND student_count < 1000;

(3)or 连接多个条件

使用 SQL 中的逻辑运算符 OR 与 AND 关键字不同,OR 关键字,只要记录满足任意一个条件,就会被查询出来。

SELECT *
FROM `courses`
WHERE `name` = 'System Design'
	OR `name` = 'Django';

(4)not 过滤不满足条件的数据

使用 SQL 中的逻辑运算符 NOT 可以过滤掉 WHERE 子句中不满足条件的结果集。

SELECT *
FROM `teachers`
WHERE NOT (`age` > 20 AND `country` = 'CN');

(5)in 查询多条件 not in

当我们需要查询单个表条件过多时,就会用多个 'OR' 连接或者嵌套,这会比较麻烦,现在我们有 'IN' 能更方便的解决这一问题。

SELECT * FROM courses
WHERE created_at in("2021-01-01","2021-01-03");

(6)between and 查询两值间的数据范围

、函数

1、ifnull()

IFNULL() 函数用于判断第一个表达式是否为 NULL,如果为 NULL 则返回第二个参数的值,如果不为 NULL 则返回第一个参数的值。

IFNULL() 函数语法格式为:

IFNULL(expression, alt_value)

、练习题

1、找出至少有五个下属的经理

表: Employee

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| name        | varchar |
| department  | varchar |
| managerId   | int     |
+-------------+---------+
id 是此表的主键(具有唯一值的列)。
该表的每一行表示雇员的名字、他们的部门和他们的经理的id。
如果managerId为空,则该员工没有经理。
没有员工会成为自己的管理者。
编写一个解决方案,找出至少有五个直接下属的经理。
以 任意顺序 返回结果表。

方法一:复制表,连接

select JING.name AS name from Employee as JING
join Employee as YUAN
ON JING.id=YUAN.managerId
group by JING.managerId
HAVING COUNT(YUAN.managerId)>=5;

方法二:嵌套

select name from Employee 
where id in 
( select managerId from Employee 
group by managerId 
having count(id)>=5 )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值