一、SQL语言
1.DDL:数据定义语言,用来建立数据库、数据库对象和定义其列,如create、alter、drop
2.DML:数据操纵语言,用来插入、查询、删除和修改数据库中的数据,如select、insert、update、delete
3.DCL:数据控制语言,权限控制,用来控制数据库组件的存取许可、存取权限等,如commit、rollback、grant、remove
4.DQL:数据查询语言,只有select一条(Windows的T-SQL语言)
二、权限控制
1.授予权限
grant 权限 on 数据库名.表名 to 用户名@来源地址 identified by '密码'
例:great select on user.list to 'userl'@localhost identified by '123456';
如果没有该用户会自动创建,当用户存在是,后面设置的新密码可以覆盖旧密码
2.查看权限
show grants for '用户名'@'主机地址';
3.撤销权限
revoke 权限 on '数据库名'.'表名' from '用户' @ '主机地址';
如果要撤销所有权限,将权限项写all
4.权限列表
权限 | 说明 |
---|---|
all | 设置grant option之外的所有权限 |
alter | 允许使用alter table |
create | 允许使用create table |
delete | 允许使用delete |
index | 允许使用index |
insert | 允许使用insert |
select | 允许使用select |
update | 允许使用update |
drop | 允许使用drop table |
replication slave | 允许从服务器中读取二进制日志文件 |
show databases | 允许显示所有数据库 |
三、使用SQL查询数据
1.SELECT语法结构
SELECT select_list [INTO new_table_name] FROM table_name [ WHERE search_conditions ] [GROUP BY group_by_expression] [HAVING search_conditions] [ORDER BY order_expression [ASC|DESC] ]
参数解释
SELECT子句:指定查询内容
INTO子句:把查询结果存放到一个新表中(MySQL中不支持,create table A select * from student;)
FROM子句:指定查询源
WHERE子句:查询条件
GROUP BY子句:指定查询结果的分组条件,表示要进行分类聚合的字段。比如要按照部门分类统计员工数量,部门就应该写在group by 后面
HAVING子句:指定分组搜索条件,与GROUP BY子句一起使用
ORDER BY子句:指定查询结果的排序方式
2.查询所有列
select * from tablename;
3.查询特定的列
select 列名 from tablename;
4.查询特定的行
selcet 列明 from 表名 where 表达式
例: select * from tablename where 成绩>90
select * from tablename where 姓名 like ‘张%’
select 姓名,成绩 from student where 性别='男' and 成绩>80;
5.查询多少行
SELECT 列名 FROM 库名.表名 LIMIT 10; #查询前十行
SELECT * FROM student.grades LIMIT 10;
6.改变查询结构集的列名称
select 列名 as newname from 表名 where 表达式
例:select 姓名 as name,成绩 from 表名 where 姓名='zhangsan'
7.排序查询
select 列名 from 表名 order by 列名 ASC|DESC #升序|降序
select * from student order by 成绩 ASC|DESC
8.聚合函数
select 函数(列名) from 表名
select 函数(列名) as 新列名 from 表名
#将查询的结果定义一个新列名
1)求和查询 SUM
2)平均值 AVG
3)最大值 MAX
4)最小值 MIN
9.分组查询
select 列名 定义一个新列名 from 表名 group by 列名;
例:select 姓名,SUM(成绩) 总成绩 from student group by 姓名;
10.查询结构另存表
select 列名 into 定义一个新表 from 表名;
例:select * into newtalbe from student;
11.多表查询
1)内连接:只返回两个数据集合之间匹配关系的行
select 表.列 as newname,表.列 as newname from 表名,表名 where A表名.列名=B表名.列名;
例:select A.姓名 as A_name, B.学校 as B_school from A,B where A.姓名=B.姓名;
select A表.列 as newname,B表.列 as newname from A表名 inner join B表名 on A表名.列名=B表名.列名
例:select A.姓名 as A_name, B.学校 as B_school from A inner join B on A.姓名=B.姓名;
2)左外连接
select 表.列 as newname,表.列 as newname from A表名 left join B表名 on A表名.列名=B表名.列名
例:select A.姓名 as A_name, B.学校 as B_school from A left join B on A.姓名=B.姓名;
3)右外连接
select A.姓名 as A_name, B.学校 as B_school from A right join B on A.姓名=B.姓名;
4)完整外连接
mysql不支持full join,SQL SERVER可以
12.查询MySQL有多少链接数
show status like 'Threads%';
13.查看MySQL由哪些具体IP连接
select SUBSTRING_INDEX(host,':',1) as ip , count(*) from information_schema.processlist group by ip;