SQL语句基础
-
数据库(文件夹)
-
增
create database <数据库名称> charset utf8;
-
删
drop database <数据库名称>;
-
改(不能改名,可以更改字符编码)
alter database <数据库名称> charset utf8;
-
查
# 查看所有库的库名 show databases; # 单独查看某一个库的信息 show create database <数据库名称>;
-
-
数据表(文件)
-
首先切换到相关数据库下(文件夹)
use <数据库名称>;
-
查看当前所在的数据库(文件夹)
select database();
-
增
-
创建数据表
# ENGINE=INNODB使创建的数据表支持事务,auto_increment表示自增; # primary key的作用是用来约束(不能重复且不能为空)和加速查找; # 一个表里只能由一个自增列和主键,但主键可以由多个列组成。 CREATE TABLE userinfo( user_id BIGINT NOT NULL auto_increment PRIMARY KEY, user_name CHAR(64), user_age TINYINT UNSIGNED, user_sex enum('男','女'), user_password CHAR(254), user_email CHAR(254) )ENGINE=INNODB DEFAULT CHARSET utf8;
-
增加字段(默认放置在最后)
alter table <数据表名称> add <字段名称> <完整性约束条件>;
-
指定增加字段在最前
alter table <数据表名称> add <需要添加的字段名称> <完整性约束条件> first;
-
指定增加字段在某个字段之后
alter table <数据表名称> add <需要添加的字段名称> <完整性约束条件> after <指定的字段名称>;
-
-
删
-
删除表
#删除表 drop table <数据表名称>; #清空表,但清空表后,不会清空自增字段的offset(偏移量)值,再插入数据自增继续 delete from <数据表名称>; #清空表,清空表后,再插入数据自增重新开始 truncate from <数据表名称>;
-
删除字段
alter table <数据表名称> drop <字段名称>;
-
-
改
-
修改表名称
alter table <旧数据表名称> rename <新数据表名称>;
-
修改字段属性(最常用)
alter table <数据表名称> modify <字段名称> <数据类型> <完整性约束条件>;
-
修改字段名称和字段属性
alter table <数据表名称> change <旧字段名称> <新字段名称> <旧数据类型> <完整性约束条件>; alter table <数据表名称> change <旧字段名称> <新字段名称> <新数据类型> <完整性约束条件>;
-
修改字段的排列顺序在最前
alter table <数据表名称> modify <需要修改的字段名> <数据类型> <完整性约束条件> first;
-
修改字段的排列顺序在某个字段之后
alter table <数据表名称> modify <需要修改的字段名> <数据类型> <完整性约束条件> after <指定的字段名>;
-
-
查
# 查看当前库下所有的表名 show tables; # 查看表的详细信息 show create table <数据表名称>; # 查看数据表表结构 desc <数据表名称>;
-
-
数据记录
-
增
# 插入一条记录 insert into <数据库名称>.<表名称> values(1,'user1'); # 指定字段插入一条记录 insert into <数据库名称>.<表名称>(id,name) values(1,'user1'); # 指定字段插入多条记录 insert into <数据库名称>.<表名称>(id,name) values (1,'user1'), (2,'user2'), (3,'user3'); # 从一个表中导入记录 insert into <数据库名称>.<表名称>(id,name) select id,name from <数据库名称>.<表名称>
-
删
# 不加条件 delete from <数据库名称>.<表名称>; # 加条件 delete from <数据库名称>.<表名称> where name="SB" ; delete from <数据库名称>.<表名称> where name!="SB" ; delete from <数据库名称>.<表名称> where id<10; delete from <数据库名称>.<表名称> where id>10; delete from <数据库名称>.<表名称> where id=10 and name="SB";
-
改
update <数据库名称>.<表名称> set name='sb' where id > 1;
-
查
-
单表数据查询
# 查询所有字段 select * from <数据库名称>.<表名称>; # 按指定字段查询 select id,name from <数据库名称>.<表名称>; # 将查出来的字段以别名显示 select name as 用户名 from <数据库名称>.<表名称>; # 将查询的结果去重(去重所有字段完全重复的) select distinct * from <数据库名称>.<表名称>; # 将查询出的结果进行四则运算(加、减、乘、除)并重命名 select name,salary*12 as annual_salary from <数据库名称>.<表名称>; # 将查询出的结果使用函数进行拼接 select concat('姓名:',name,' ','年薪:',salary*12) as annual_salary from <数据库名称>.<表名称>; # 将查询出的结果使用函数中的第一个元素作为分隔符进行拼接 select concat_ws('|',name,salary*12) as annual_salary from <数据库名称>.<表名称>; # 将查询结果进行条件判断 select(case when name='python' then name else concat(name,'_sb') end) from <数据库名称>.<表名称>; # select后面的关键字负责筛选列,关键字where负责筛选行 # 按照比较运算符进行条件查询(支持比较运算符>、<、>=、<=、<>、!=) select id,name from <数据库名称>.<表名称> where id>10; select id,name as 姓名 from <数据库名称>.<表名称> where id>=10; # 按照指定范围查询,如:查询id为1、5、和10的记录 select * from <数据库名称>.<表名称> where id in(1,5,10); select * from <数据库名称>.<表名称> where id in(select id from <数据库名称>.<表名称>); # 按照范围查询,如:查询字段id 1到10之间的记录 select * from <数据库名称>.<表名称> where id between 1 and 10; # 模糊匹配,通过通配符查询以a开头的所有name,%表示任意多的字符 select * from <数据库名称>.<表名称> where name like "a%"; # 模糊匹配,通过通配符查询以a开头的所有name,_表示一个字符 select * from <数据库名称>.<表名称> where name like "a_"; # 查询前10条记录 select * from <数据库名称>.<表名称> limit 10; # 使用逻辑运算符进行条件查询(and、or、not) select * from <数据库名称>.<表名称> where name='python' or name='golang'; # 筛选查询结果为null或不为null使用is null和is not null select * from <数据库名称>.<表名称> where <字段名称> is null; select * from <数据库名称>.<表名称> where <字段名称> is not null; # 排序 # 限制查询的记录数:关键字limit # 查询第5条之后的10条记录 select * from <数据库名称>.<表名称> limit 5,10; # 将查询结果按照条件排序:关键字order by,默认是升序,降序使用desc # 查询记录并按照ID从小到大列出 select * from <数据库名称>.<表名称> order by id; # 查询记录并按照ID从大到小列出 select * from <数据库名称>.<表名称> order by id desc; # 查询记录,现根据age字段从小到大排列,再根据age相同的数据里将salary字段从大到小排列 select * from <数据库名称>.<表名称> order by name ,salary desc; # 分组聚合:分组与聚合函数一起用才有意义! # 分组:关键字group by # 聚合函数:关键字count、max、min、sum、avg select count(id),max(id),user_id from <数据库名称>.<表名称> group by user_id; # 过滤:关键字having,适合筛选符合条件的某组数据,而不是某行数据。在having中可以使用函数,在where中不行。 # 对于聚合函数结果进行二次筛选时,必须使用having,而且是先分组,再过滤 select count(id),max(id),user_id from <数据库名称>.<表名称> group by user_id having count>1;
-
多表数据查询
-
连表查询
所谓连表,就是两张表通过字段进行连接的时候创建一张大表,里面存放的是两张表的笛卡尔积,在根据条件进行筛选。
-
连表的用法
# 内连接(无对应关系则不显示) select * from <表1> inner join <表2> on <条件>; # 外连接 # 左外连接(表1全部显示) select * from <表1> left join <表2> on <条件>; # 右外连接(表2全部显示) select * from <表1> right join <表2> on <条件>; # 全外连接(表1、表2全显示) select * from <表1> left join <表2> on <条件> union select * from <表1> right join <表2> on <条件>; # 上下连表(自动去重) select id,name from <表1> union select id,name from <表2> # 上下连表(自动不去重) select id,name from tb1 union all select id,name from tb2
-
子查询
-
查询的条件使用的是另一个查询的结果
select <条件> from <表1> where <条件> in(select <条件> from <表1> where <条件>);
-
-
-
拓展
- 在执行select语句的时候,实际上是通过where、group by、having这几个语句锁定对应的行,然后循环每一行执行select语句。
-
-
有疑问加站长微信联系(非本文作者)