SQL语句
DDL(数据定义语言)
1、概述:
DDL(数据定义语言):用于定义数据库、表等。
2、常见DDL的SQL语句:
2.1 数据库
查看所有数据库 show databases;
创建数据库 create database [IF NOT EXISTS] 数据库名 [CHARSET=utf8]
IF NOT EXSTS:表示如果不存在。用于本SQL语句的意思是:如果不存在则创建该数据库
Charset:用于指定该数据库的编码
删除数据库 drop database [IF EXISTS] 数据库名
IF EXISTS:表示如果存在
使用该数据库 use 数据库名
修改数据库编码:alter database 数据库名 character set UTF-8
2.2数据库中的表(table)
查看数据库中的表 show tables
查看某一个表的表结构 desc 表名
创建表 create table if not exists 表名(列名 列类型,列名 列类型,......)
删除表 drop table if exists 表名
修改表
(A):修改列的类型
alter table 表名 modify 列名 新类型
(B):修改列
alter table 表名 change 旧列名 新列名 新类型
(C):更改表名称
alter table 表名 rename to 新表名
(D):添加列
alter table 表名 add 列名 类型
(E):删除列
alter table 表名 drop 列名
DML(数据操作语言)
DML(数据操作语言):用来定义数据库记录(数据)。增、删、改
增:
(A):指定列的增加单行记录
insert into 表名(列名,....)values(值,.....)
(B):不指定列(默认全部列)的增加单行记录
insert into 表名 values(值,.....)
(C):指定列增加多行记录
insert [ignore] into 表名(列名,....)values(值,.....),(值,.....)
(D):不指定列增加多行记录
insert [ignore] into 表名 values(值,.....),(值,.....)
(E):注意:ignore是属于MySQL特有。
作用是:忽略导致错误的行,其余行插入。
删:
delete from 表名 where 条件
改:
update [ignore] 表名 set 列名=值 where 条件
ignore作用:忽略错误行,继续更新
DCL(数据库控制语言)
DCL(数据控制语言):用来定义访问权限和安全级别。
创建用户
create user 用户名@ip地址 identified by ‘密码’
ip地址:指定该用户名能在哪个ip地址访问。
删除用户 drop user 用户名@ip地址
获得权限 grand 权限列表 on 数据库.表名 to 用户名@IP地址
撤销权限 revoke 权限列表 on 数据库.表名 from 用户名@IP地址
查看权限: show grants for 用户名@IP地址
DQL(数据库查询语言)
DQL(数据查询语言)用来查询记录(数据)。
1.构成关键字
select(必须) from(必须) join where group by having order by limit
2.语句
2.1 select
select * from 表名 查看表中所有列 ,*表示所有列
例子: SELECT * FROM demot;
select 列名,.... from 表名 查询表中指定列数据
例子: SELECT ea,eb,ec comm FROM demot;
select distinct * from 表名 查询表中非重复列
例子: SELECT DISTINCT ea,eb FROM demot;
2.1.1 关于列的运算
算术运算 / +-*
select ea+100 from demot;
将NULL转换为其他值(一般转换为0)
select IFNULL(ec,0) from demot;
起别名可以省略AS
select IFNULL(ec,0) sdf from demot;
2.2 where子句
where子句,用于过滤数据(UPDATE和Delete都可以用Where子句)
2.2.1where相关运算符
where后面加条件,where子句不可以使用聚合函数。
用于where的比较运算符 =、!=、<>、<、>、<=、>=
select * from demot where ea=1;
and 和 OR运算符
select * from demot where ea !=1 And eb >=100;
IN 和not IN运算符
select * from demot where ea in (1,2,10,50);
beween .... and.....
select * from demot where eb between 10 and 100
select * from demot where eb >=10 and eb<=100 //等价于上面那句
LIKE和 not Like运算符 用于模糊查询 %匹配0-N个字符;_匹配0-1个字符。
select * from demot where ee like ‘张_’
select * from demot where ee not like '李%'
IS Null和IS not null 判断空和非空
select * from demot where ef is not null;
2.3 Limit子句
指定查询结果集的行数
语法:
1、 limit offset count
offset指定第一个返回记录行的偏移量。
count 指定返回的最大行数
例子: select * from demot limit 2,5 //查看第3到7行数据
2、 limit N //指定返回前几行数据
例子:select * from demot limit 5 //查询前五行数据
2.4 order by 子句
用于排序。 ASC是升序(默认) DESC是降序
单个数据排序
select * from demot order by ea ASC //根据ea升序排序;asc可以省略
多个数据
select * from demot order by ea asc,eb desc //根据ea升序排序,若ea相等,则按照eb降序排序。
2.5 group by和having
用于分组,通过列或者表达式的值将查询到的行分组为几个小分组。
group常与聚合函数一起使用(聚合函数详见后期博文)
例子
select * from t1 group by st having 条件 // ( 条件用于筛选每组数据)
2.6多表查询
2.6.1 子查询
出现位置where 之后作为条件存在
出现在from作为表存在,
2.6.2连接查询
A: 内连接 inner join
返回表中连接字段相同的行。除去不匹配的行。
select * from A inner join b on a.id=b.id
B: 笛卡尔积cross join
返回两表的笛卡尔积
select * from tableA cross join tableB
C:外连接
C-1:左外连接left Join
返回左表中的所有记录和右边中的联结字段(左表中无匹配的行,用null值表示)
select * from A left join B on A.id=B.id
C-2:右外连接 right join
返回右表中的所有记录和左边中的联结字段(右表中无匹配的行,用null值表示)
select * from A right join B on A.id=B.id
C-3全外连接 Full join
就是左外连接和右外连接的并集。Mysql无此语法、实现方式如下:
select * from A right join B on A.id=B.id
union
select * from A left join B on A.id=B.id
2.6.3 union 和 union all
将两个或者多个结果集合并在一起
union :去除重复行
union all:不去除重复行
(注意:两个结果集必须具有相同的数量的列和相似的数据类型)