该篇演示sql语句用的是mysql,除此之外sql server等数据库也是使用sql语言,本篇主要是介绍sql语言,关于运用到mysql中具体使用会在后面更新一篇新的博客
该表格是我们下面基本语句举例操作的原始表格


一、基础语句
1.select语句
select 关键字用于指定要查询的列,可以使用*代表所有列;
from关键字用于指定要查询的表;where关键字用于指定查询的条件。
select column1, column2, ... from table_name where condition;
eg:
查询students表格中性别为男的所有列

查询students表格中性别为男的姓名列和年龄列
这里可以用#注释代码,查询的列名要用英文格式的逗号隔开

2.insert语句:用来增加行
table_name是要插入数据的表名;
column1、column2等是表中的列名,value1、value2等是要插入的值。
insert into table_name (column1, column2, column3, ...) values (value1, value2, value3, ...);
eg:
添加行的时候要注意添加数据的数值类型,是字符串还是数值,该不该带引号这些问题

如果我们前面写的列名,后面没有匹配到,就比如前面我们写了year但是后面我们数值上没写,这个insert就不能运行成功

但如果我们前面也不写year这个列名,改行就能添加成功,没写数值的那个地方会自动填充null
这个意思就是写insert语句的时候前面列名个数要和后面值个数是一一对应的

3.updata语句
table_name是要更新数据的表名,column1、column2等是要修改的列名,value1、value2等是要修改的值,where子句是用于指定要更新的行的条件。
update table_name set column1 = value1, column2 = value2, ... where some_column = some_value;
set后是需要修改的内容,where后面加条件确定是哪一行需要做出更新,这里我们就是把表中‘小薛’的年龄从20改成了21(ctrl+/键也能达到注释的效果)

4.delete语句
table_name是要删除数据的表名,where子句是用于指定要删除的行的条件。
注意:如果不指定条件相当于删除表中所有数据
delete from table_name where some_column = some_value;
from后加表名,where后加条件确定是该表哪一行要删除,不加where整个表都会被删除

二、基本查询
1.where子句
where子句是结构化查询语言(sql)中用于筛选数据的关键字。通过where子句,您可以指定一个或多个条件来限制从数据库中检索的数据行。
在上述中例子中我们就使用了where子句
select * from table_name where some_column = some_value;
where子句可以使用以下比较运算符:
=(等于)<(小于) >(大于)<=(小于或等于)>=(大于或等于)<>或!=(不等于)
还可以使用逻辑运算符(and、or和not)来组合多个条件
eg: select * from students where sex = ‘男' and age > 23;
1)模糊搜索
在where子句中加上like或折rlike,like后加条件,但不是具体的条件,意为寻找这一类的信息
-- 多字符匹配
select * from students where clazz like 'xx%'
-- 单字符匹配
select * from students where stu_name like '张_';
-- 多关键词匹配:找姓名含“张”或“李”或“王”的学生
select * from students where name rlike '张|李|王'
-- 范围匹配:找姓名含“张”且后面跟1-2个字符的学生(如“张三”“张三丰”)
select * from students where name rlike '张.{1,2}';
多字符匹配用%,通配符,意思为匹配任意多个字符,包括0个,

rlike,寻找名字里带薛和钱的信息,|这里表示或

单字符匹配用_,只能匹配一个字符

{1,2}左右都是闭区间

2)in
返回选项中的内容
这个也是多种情况,可以范围满足括号里要求的信息
select * from students where clazz in ('xx','xx','xx');3)between and
返回年龄在22到24的学生,是区间
select * from students where age between 22 and 24;
2.order by子句
order by子句用于对查询结果按照一个或多个列进行排序。它接受一个或多个列名或表达式作为参数,并可指定每个列的排序方式(asc:升序,desc:降序)。
asc,desc跟在列名后,输出的列就会按照顺序列出
select 列1,列2…… from table_name order by 列名 asc, 列名 asc ... select 列1,列2…… from table_name order by 列名 desc, 列 desc ...
这里我们需要注意的是,如果要求对两列及以上进行排序,那输出结果是优先以第一个列先满足排序要求,,就像这里的age我们设置的是降序,但是19在20上面是因为,stu_id是按照降序排列,20250103在20250104前面

换一种写法,此时我们把age排序写前面
就可以看出输出结果是和之前不一样的,先把年龄按照降序排列,当年龄一样为20的时候也才会对stu_id的升序排列

3.group by子句
group by子句用于将查询结果按照一个或多个列进行分组,并对每个组进行聚合计算(如count计数、sum求和、avg求平均值,max求最大,min求最小)。
select column1, column2, ..., avg(column_name) from table_name group by column1, column2, ...
这里是按照major分组产生一个表格,并计算平均年龄
注意这个语句使用时要注意,select后面跟什么列group by后就要跟什么列,除了聚合列

嵌套where
嵌套where就是在原来选择信息基础上加上条件改变选择那些信息,as是给这个新产生的表取一个名字
from 表名 group by column1, column2, ...) as t1 where 条件
4.having子句
having子句用于对分组后的结果进行过滤,只返回符合条件的分组。它接受一个或多个聚合函数作为参数,并可指定每个函数的过滤条件
select column1, column2, ..., aggregate_function(column_name) from table_name group by column1, column2, ... having 条件;
加上having过滤一下信息,只输出品平均年龄>=20

5.limit子句
limit用于限制查询结果集的行数,其中,number是你想要返回的行数。
select column1, column2, ... from table_name limit 数字;

多行查询
-- 多行查询 从number1起 limit number2个 select column1, column2, ... from table_name limit number1,number2;
从第2个之后开始输出下面4个

6.offsite子句
offset用于指定查询结果集的偏移量。
其中,number是你想要返回的行数,offset_num是从查询结果集的起始位置偏移的行数。
select column1, column2, ... from table_name limit 数字 offset 数字;
offset 5,表示跳过前五行开始输出,限制4个

三、数据连接
内连接和外连接都是把多张表的数据拼在一起,他们的区别就在于如何处理匹配补上的行
1.内连接(只返回表间都匹配的行):join或者inner join
select 列名,列名 from ( 表1 join 表2 join 表3 on 连接点 );
select后面的列若是在两以上都存在要写清是哪个表格里面的列,join把独立的表连接起来,on是表连接点

2.外连接
外连接又分为左外连接和右外连接以及全连接
left join(左表全保留,右表不匹配的补上null):
students在左边,以students为准,所有同学都会输出

right join(右表全保留,左表不匹配的补上null):
在scores表中添加一个信息,这个stu_id没有对应的学生信息

这样输出即时students中没有这个stu_id的学生也会输出,但是会出现下面两种情况,这是因为,我们select的表用一个stu_id列我们选择输出哪个表的stu_id有关,students表中可没有20250501这个学号所以输出当然是null,这一点容易混淆


full join(两表的数据全显示),但是我们的mysql是不支持full join的用法的,所以我们用union代替。union是有些复杂的相比于full join。
3.union 操作
先拼接再删去重复行
例子帮助理解
-- 合并“成绩≥90”和“成绩≤60”的学生信息(union 自动去重) select s.stu_id, s.stu_name, sc.score, su.subject_name from students s join scores sc on s.stu_id = sc.stu_id join subjects su on sc.subject_id = su.subject_id where sc.score >= 90 union select s.stu_id, s.stu_name, sc.score, su.subject_name from students s join scores sc on s.stu_id = sc.stu_id join subjects su on sc.subject_id = su.subject_id where sc.score <= 60 order by score desc;
union all操作
直接拼接结果,不做任何删去重复行或者排序的操作
-- 添加一个student 张三 19 select name from students where age = 20 union all select name from students where age = 19;
上述是一些比较基础的sql语言,下面系统的介绍sql语言
四、sql分类
1.数据查询语言(dql,data query language)
就是sql基础语言,用来查询信息,但不做改动,核心关键字有select,from,where,group by,having,order by,limit,jion等,具体使用方法见上文
2.数据操作语言(dml, data manipulation language)
用来增/删/改数据库中的数据信息,但不改变表结构
核心关键词有insert(新增),update(修改),delete(删除),merge(合并,部分数据库支持)参考上文,不过mysql不支持merge语句这里不做叙述
dml语言使用后有可用commit(提交)确认修改或者rollback进行回滚(撤销修改),关于提交其实这个操作,因为mysql等常见数据库是默认打开自动提交模式,所以这些语句执行后是会自动提交的,这时候commit不用写
3.数据定义语言(ddl, data definition language)
定义/修改/删除数据库对象(表,索引,视图,触发器,数据库等)的结构,在mysql(8.0之前)中操作会直接生效(无需事物提交)
首先解释一下无需事务提交的意思,mysql中(8.0之前)ddl语句执行后立即生效不能回滚
dml语句(insert,update……)语句可回滚,也就是我们执行了dml语句后可以通过rollback进行对上面语句操作的撤回,ddl就无法撤回
但不是所有ddl的操作都不能回滚,大部分情况下是这样的,但是有些数据库中ddl语句是可以回滚的,例如sql server数据库就是可以的,而我们的mysql在8.0版本之后部分ddl可回滚
核心关键字:create(创建),alter(修改),drop(删除),truncate(清空表),rename(重命名)。
-- 创建用户表 create table users ( id int primary key auto_increment, name varchar(50) not null, age int, phone varchar(20) unique ); -- 给用户表新增email字段 alter table users add column email varchar(100); -- 删除用户表 drop table users; -- 清空用户表(删除所有数据且不可回滚) -- truncate table users;





删之前:

删除:

刷新后:

无users表
4.数据控制语言(dcl, data control language)
管理数据库的权限和事物,控制用户对数据库的访问权限,事物提交/回滚等
核心关键词有grant(授权),revoke(撤销权限),commit(提交事务),rollback(回滚事务),savepoint(保存点),set transaction(设置事物属性)
--创建用户 create user '用户名'@'主机名' identified by '密码' -- 授予用户对users表的查询/插入权限 grant select, insert on users to '用户'@'主机名'; -- 撤销用户的插入权限 revoke insert on users from '用户'@'主机名'; -- 提交事务(确认dml操作) commit; -- 回滚事务(撤销未提交的dml操作) rollback;
5.事物控制语言(tcl, transaction control language )
部分sql分类中tcl会从dcl中独立出来。专门聚焦事物管理(本质是dcl的子集)
核心关键字有commit,rollback,savepoint
-- 开启事务(部分数据库需显式声明) start transaction; update users set age = 26 where id = 1; -- 设置保存点 savepoint sp1; delete from users where id = 2; -- 回滚到保存点(仅撤销删除操作,修改操作保留) rollback to sp1; -- 提交最终修改 commit;
总结
到此这篇关于sql常见语句的文章就介绍到这了,更多相关sql常见语句内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论