数据库信息相关操作
可以通过 help show
显示允许的show语句
mysql -u root -p #提示输入密码 进入mysql 登录数据库
show databases; #显示Mysql中所有数据库
use michael; #选择数据库
show tables; #显示数据库中所有表
show columns from test; #显示表中列信息
show status; #显示广泛的服务器状态信息
show grants; #显示授权用户的安全权限
show errors; #显示服务器错误信息
show warnings; #显示服务器警告信息
SQL分为DDL,DML,DCL三种语言
DDL(data definition language) 数据库定义语言:用于定义表,列,索引,存储过程等数据库对象,create,drop,alter等
DML(data manipulation language)数据库操纵语言:负责对数据库对象运行数据访问工作的指令集,增删改查数据库的记录,以insert,delete,update,select为中心
DCL(data control language)数据库控制语言:用来设置或更改数据库用户的访问权限和安全级别。grant,revoke等
DDL语句
create database database1; #创建数据库
drop database database1; #删除数据库
create table test1(name varchar(10)); #创建表
drop table test1; #删除表
alter table test1 rename to test2; #修改表名
alter table test1 add age int; #增加一列
alter table test1 drop column age #删除列
alter table test1 modify column age varchar(10);#修改列属性
DCL语句
create user tester identified by '1234'; #创建用户
use mysql;select user from user; #在mysql数据库中的user表查找tester
show grants for tester; #查看权限
grant all privileges on michael.* to 用户名@‘主机名’ identified by 'password' #为用户授权
revoke all on michael.* from 用户名; #收回权限
set password for tester = Password("123"); #修改密码
DML语句
insert into table2(name) values("张三"); #插入一行数据(安全)
insert into table2 values("李四"); #插入一行数据(不安全)
insert into table2(name)values("王五"),("michael"); #插入多行
delete from table2 where name = "张三"; #删除一行
delete from table2; #删除表的全部内容,不删除表结构
truncate table2; #删除表重建一个table2表相比与delete速度更快
update table1 set name = "John" where name = "张三";
select * from table1; #检索全部列,一般不推荐速度慢
select name from table1; #检索一列
排序检索查询
select name from table1 order by name desc; #单个列排序 desc 降序 asc升序(默认)
select name, age from table1 order by name,age; #先以name排序,再以age排序
select name, age from table1 order by age limit 1; #配合limit可以找出最大值/最小值
过滤查询
select name from table1 where name = "001"; #使用where子句
select name from table1 where name is Null #null不代表0,空格,空字符串。
select name from table1 where age >10 and age <20 or age > #and 表示条件全部满足
select name from table1 where age >20 or age <10 #or表示条件满足一个即可
select name from table1 where sex in('男','女'); #in表示在指定条件范围内匹配
select name from table1 where sex not in('男','女'); #not 表示否定它之后跟的条件
where子句操作符
操作符 | 说明 |
---|---|
= | 等于 |
> | 大于 |
< | 小于 |
!= | 不等于 |
<= | 小于等于 |
>= | 大于等于 |
<> | 不等于 |
between value1 and value2 | 在指定的值之间 |
模糊查询,使用通配符
通配符的查询时间一般较长,需正确使用和不要过度使用
select name from table1 where name like '00%' ; # %表示任何字符出现任意次数,筛选以00开头的名字
select name from table1 where name like '_0' ; # _下划线表示任意字符只出现一次
聚合函数
select avg(age) from table1; #查询所有人年龄的平均值
select max(age) from table1; #查询所有人年龄的最大值
select min(age) from table1; #查询所有人年龄的最小值
select sum(age) from table1; #查询所有人年龄之和
select count(age) from table1; #计算age字段的数据,不计null值
select count(*) from table1; #记录查询的记录数,包含null值记录
select distinct age from table1; #distinct 选出年龄不同的数据
分组函数
分组使用group by 子句, 过滤分组使用having子句。
注意事项:1.group by 子句中列出的列都必须是检所列或者有效的表达式但不能是聚合函数,如果select子句中使用表达式,则group by 子句中必须使用相同的表达不能使用别名 。 2.除了聚集函数外,select子句中的列必须在group by 子句中给出。3.如果分组列中存在Null值则null作为一个分组。3.where 在分组前过滤,过滤行;having在分组后过滤,过滤组。having子句中的列是group by 子句的列或者聚合函数列。
select name, age from table1 group by name,age; #先以name分组,再以age分组
select age from table1 group by age having age > 10; #having子句作为分组后的条件选出age>10的数据
select语句执行顺序
子句 | 说明 | 是否必要使用 |
---|---|---|
select | 要返回的列或者表达式 | 是 |
from | 从中检索数据的表 | 仅在从表中选择数据的时候使用 |
where | 行级过滤 | 否 |
group by | 分组说明 | 仅在按组计算聚集函数时使用 |
having | 组级过滤 | 否 |
order by | 输出排序顺序 | 否 |
limit | 要检索的行数 | 否 |