目录
一、SQL基础
1.SQL语句分类
2.SQL数据类型
二、DDL
1.库操作
2.表操作
三、DML
1.增
2.删
3.改
四、DCL
1.创建用户
2.授权
3.撤销权限
4.查看权限
5.删除用户
五、DQL
1.字段控制
2.条件控制
3.排序控制
4.聚合函数
5.分组查询
6.limit子句
一、SQL基础
1.SQL语句分类
- DDL(Data definition Language):数据库定义语言,用于定义数据库对象:库、表、列,如创建、删除、删除库/表结构
- DML(Data Manipulation Language):数据库操作语言,用于定义数据库记录,如增、删、改表里的记录
- DCL(Data Control Language):数据库控制语言,用于定义访问权限和安全级别
- DQL(Data Query Language):数据查询语言,用于查询表里的记录
2.SQL数据类型
- int:整型
- double:浮点型,double(5,2)表示最多5位,其中必须有2位小数点
- decimal:浮点型,主要用于表示十进制
- char:固定长度字符串,char(255),数据不足255位时,自动补足至255位
- varchar:变长字符串,varchar(65535),最多65535位字符
- text(clob): 字符串类型,mysql独有,分为thinytext/text/mediumtext/longtext,可变长,对应的公用的存储大字符的类型为clob,用于存文本文件
- blob:二进制类型,可变长,分为varbinary/tinyblob/blob/mediumblob/longblob,用于存二进制文件
- date:日期类型,格式:yyyy-MM–dd
- time:时间类型,格式:hh:mm:ss
- timestamp:时间戳,date+time
二、DDL
接下来看下数据库对象(库、表、列)的创建、删除过程。
以我的MySQL为例,登录:
mysql -uroot -p123456
1.库操作
查看数据库:
mysql> show databases;
创建库:
create database [if not exists] mydb [charset=utf8];
切换库:
use mydb;
删除库:
drop database [if exists] mydb;
修改库编码:
alter database mydb character set utf8;
2.表操作
选择数据库后,use mydb1;
查看mydb1中所有表:
show tables;
创建表:
create table [if not exists] mytable1(name varchar(20),number char(11),age int);
查看表结构:
desc mytable1;
删除表:
drop table mytable1;
修改表:
修改表有add/modify/change/drop/rename,所有的修改都需要同样的前缀:alter table table_name
重命名表 rename:
alter table mytable1 rename to ta_stu;增加列 add:
alter table mytable1 add (address varchar(100),sex vhar(10));删除列 drop:
alter table mytable1 drop address;修改列类型 modify:
alter table mytable1 modify sex varchar(10);修改列名称(及类型) change:
alter table mytable1 change sex height varchar(20);
三、DML
1.增
前缀 insert into
**插入部分列值记录
insert into mytable1(address,age) values(“hangzhou binjiang”,26);**插入所有列值记录
insert into mytable1 values(“wh”,”158”,26,”binjiang”,”180”);
2.删
前缀 delete from table_name where condition
3.改
前缀 update table_name set 列名1=value1,列名2=value2 where condition
常用运算符:
=、!=(<>)、>、<、>=、<=、BETWEEN……AND……、IN(……)、IS NULL、NOT、OR、AND
四、DCL
1.创建用户
create user username@ip_address identified by ‘password’
————用户可以在指定的ip上使用username/password登陆数据库
eg:
create user wh@localhost identified by ‘123’;
mysql -uwh -p123;
create user username@’%’ identified by ‘password’
————用户可以在任意ip上使用username/password登陆数据库
eg:
create user wh@’%’ identified by ‘123’;
mysql -uwh -p123;
2.授权
grant select,drop,insert,update….(all) on database_name.* to username@ip_address
eg:
grant all on mydb1.* to wh@localhost;
3.撤销权限
revoke select,delete…(all) on database_name.* from username@ip_address
eg:
revoke all on mydb1.* from wh@localhost;
4.查看权限
show grants for username@ip_address
eg:
show grants for wh@localhost;
5.删除用户
drop user username@ip_address;
eg:
drop user wh@localhost;
五、DQL
1.字段控制
1)查询所有列
select * from table_name;
2)查询指定列
select 列名1,列名2 … from table_name;
3)去除查询结果中的重复记录
select distinct 列名1,列名2… from table_name;
4)列运算
i.数量类型支持四则运算
select 列名1 + 列名2… from table_name where condition;
如果类型不支持转换为int类型,则被当成0:
任何数与NULL运算,结果均为NULL:
ii. 转换NULL值
select 列名1 + ifnull(列名2,default_value) from table_name;
eg:
select sal+ifnull(comm,0) from emp;
iii. 字符串拼接
select concat(字符串…,列名1,列名2…) from table_name where condition;
eg:
select concat(sal,mgr) from emp;
iiii.为查询列起别名
select 列名1 as 别名1,列名2 as别名2 from table_name;
2.条件控制
1)条件查询
与前面介绍的update/delete中的where子句类似
eg:
select * from emp where mgr in (‘1003’,’1006’,’1009’);
select ename from emp where sal between 8000 and 27500;
select job,mgr where sal >= 20000 and COMM is not null;
2)模糊查询
i.匹配一个字符
select * from table_name where 列名 like ‘_’;
eg:
select * from emp where mgr like ‘_006’;
select * from emp where job like ‘董__’;
ii.匹配多个字符
select * from table_name where 列名 like ‘%’;
eg:
select ename from emp where mgr like ‘销%’;
select sal from emp where job like ‘%员’;
3.排序控制
关键字 order by
1)升序
select * from table_name ORDER BY 列名 [ASC];
2)降序
select * from table_name ORDER BY 列名 DESC;
3)多列排序
select * from table_name ORDER BY 列名1 ,列名2 DESC…;
4.聚合函数
1) count—查询结果中的记录条数
select count(列名) from 表名;
2) max—-查询结果中某列的最大值
select max(列名) from 表名;
3) min—查询结果中某列的最小值
select min(列名) from 表名;
4) sum—查询结果中某列的和
select sum(列名) from 表名;
5) avg—查询结果中某列的平均值
select avg(列名) from 表名;
5.分组查询
关键字:group by
分组查询,只能查两个内容:
1.查询分组的列信息(主信息,即group by后面的列)
2.使用聚合函数的列。eg:
select 列1 ,sum(列2),avg(列3)…,count(列n) from 表名 where condition1 group by 列1 having condition2;
condition1—分组前条件,对满足条件的记录进行分组,即先剔除不满足条件的记录,然后进行分组
condition2—分组后条件,对分组后查询的结果进行condition2限制,针对分组查询后的结果
也可以使用多列来进行分组查询
select … from 列名 group by 列名1,列名2…
6.limit子句
关键字:limit
主要用于分页查询
select * from 表名 limit m,n;
m—表示第几条记录,从0开始
n—表示查询的条数eg: select * from emp limit 0,10;