赞
踩
@TOC
写此文旨在让自己通过整理所学知识,加深对SQL的理解,巩固所学知识;同时也方便后期复习,顺便方便同道中人,希望对有缘点进来的你有所帮助,觉得可以别忘记点赞藏。不奢求有打赏,但愿对您有所帮助!哪里写错了还望批评指正。
SQL,全称Structured Query Language(结构化查询语言) 是用于管理关系数据库管理系统(RDBMS),其通用语法包括:
1、可以单行或多行书写,以分号结尾;
2、可以使用空格或缩进来增强语句可读性;
3、注释:单行注释可以使用–或者#(其中#为MYSQL独有)加上注释内容;多行注释可以用/注释内容/,即用/**/包裹
4、关键字建议用大写
SQL语句主要分为四类,分别是DDL、DML、DQL、DCL
数据库数据库,首先得有库,才能进行后学习后面的语言,那么就先来学习第一种数据库语句DDL。
DDL主要用于定义数据库对象,如创建、删除数据库,创建表等等;常用语句的语法如下:
show databases;
show database();
create database [if not exists] 数据库名 [dufault charset 字符集] [callate 排序规则]
.注意[]表示里面的代码可以有可无,即可选代码。drop database [if exists] 数据库名;
注意,此操作存在风险,请勿轻易操作use 数据库名;
show tables;
desc 表名;
show create table 表名;
create table 表名 ( 字段1 字段类型(长度) [comment 字段1注释] [约束], 字段2 字段类型(长度) [comment 字段2注释] [约束],...,字段n 字段类型(长度) [comment 字段n注释] [约束]) [comment 表注释];
此处字段类型暂不记录,不懂就查阅各个数据库的数据类型,约束也自行查阅,可以参考菜鸟教程-SQL约束alter table 表名 rename to 新表名;
drop table [if exists] 表名;
truncate table 表名;
alter table 表名 add 字段名 字段类型(长度) [comment 字段注释] [约束];
alter table 表名 modify [column] 字段名 新数据类型(长度);
alter table 表名 alter column 字段名 字段类型(长度)[约束];或者alter table 表名 modify column 字段 字段类型 [约束];
alter table 表名 change [column] 旧字段 新字段名 字段类型(长度) [comment 注释];
alter table 表名 rename column 旧字段名 to 新字段名
alter table drop [column] 字段名;
有了库、表(容器),那么,接下来当然是考虑一下如何往容器中添加东西或者改变,移除其中的东西,那么接下来就是用于实现增删改的语言DML。
DML,用于对数据库表中的数据进行增删改(不包括查)
inser into 表名(字段名1,字段名2, ...) values(值1, 值2, ...);
inser into 表名(字段名1,字段名2, ...) values(值1, 值2, ...),(值1, 值2, ...), ...
;inser into 表名 values(值1, 值2, ...);
,当然,也可以自己手动按照第一点将所有字段列出来.inser into 表名 values(值1, 值2, ...),(值1, 值2, ...), ...
;语法:update 表名 set 字段名1 = 新值1, 字段2 = 新值2, ...[where 条件];
,注:若无条件语句,则整表更新
语法:delete from 表名 [where 条件]
,同上,若无条件,则删除整表记录,此操作有一点风险,请勿轻易整表删除
整体语法:select 字段列表 from 表名列表 where 条件别表 group by 分组字段列表 having 分组条件列表 order by 排序列表 [limit 分页参数]
.
注意:
关键字where 之前的语句为最基本的查询语句,不带where条件即是全表查询,将表中所有记录查询出来。
select 字段1,字段2, ... from 表名;
若想给字段设置别名,可以使用关键字AS,如:select 字段1 as 别名1, 字段2 as 别名2, 字段 3, ... from 表名 as 表名的别名
.想给谁取别名,就在其后加上‘as 别名’ ,此处 ‘as’ 可以省列,即直接跟上别名也可,语法如下:select 字段1 别名1, ... from 表名 表名的别名
.select * from 表名;``或者
select 字段列表(像1一样将所有字段列出来) from 表名;`.select distinct 字段列表 from 表名;
可以去掉表中重复的记录。基本查询语句是条件查询语句存在的必要条件,where语句不能单独存在。
select * from emp where id = 1 or id = 2;
、select * from emp where age = 19 and dept_id = 2
:select * from a where b like '_影';
表示从a表中搜索出字段b含有两个字且以‘影’字结尾的所有记录,select * from a where b like '%影';
则表示从a表中搜索出b字段中以‘影’字结尾的所有记录,这里就不管他是多少个字了。分组查询语句也是离不开基本查询语句,group by语句往往 都会含有其条件语句的,即配合having 语句使用(非必须);
当然了,要分组,一般离不开聚合函数,常用的聚合函数有:count、max、min、avg、sum,分别用于查询记录数、求最大值、求最小值、求平均值、求和,单独查询语法:select 聚合函数(字段) from 表名;
语法:select 字段列表 from 表名 [where 条件] group by 分组字段 [having 分组过滤条件]
select dept_id, sex, avg(age) from emp where age > 18 group by dept_id, age having avg(age) > 30;
此语句中dept_id和sex并不在聚合函数中,所以其必须出现在group by后面的分组字段中排序也是基于基本查询语句,排序语法比较简单
select 字段列表 from 表名 [where 查询条件] [group by 分组字段列表 [having 分组条件]] order by 字段1 排序方式1, 字段2 排序方式2, ...
select 字段列表 from 表名 limit 索引,记录数;
,此处索引从零开始,起始索引=(查询页码-1)*每页显示记录数;若是查询第一页,起始索引可省略直接简写成select 字段列表 from 表名 limit 记录数;
select * from (select a.*,rownum r from (select *from 表名) a where rownum <= 截止索引) where r >= 起始索引
,起始索引=(页码-1)每页记录数,截止索引=页码每页记录数-1多表查询常见有连接查询、联合查询、子查询,当然,也可以这几种合在一起
内连接相当于数学的交集,用于查询多张表之间相互交集的部分,其分为隐式内连接和显示内连接。
select 字段列表 from 表1,表2 where 条件...;
,例如 select emp.name, emp.age, dept.name as deptName from emp , dept where emp.dept_id = dept.id
–查询员工的姓名、年龄以及所在部门名称select 字段列表 from 表1 [inner] join 表2 on 连接条件;
例如select emp.name, emp.age, dept.name as deptName from emp inner join dept on emp.dept_id = dept.id
所查询结果与1相同外连接分两种,左外连接和右外连接
select 字段列表 from 表1 left [outer] join 表2 on 连接条件...;
select 字段列表 from 表1 right [outer] join 表2 on 连接条件...;
子查询:SQL语句中嵌套select 查询语句,它可以出现嵌套在insert/update/delete/select 等任何一个语句中。子查询分为:
select *from emp a where a.dept = (select dept_id from dept where name = '研发部');
此句成为标量子查询的前提是select dept_id from dept where name = '研发部'
所得结果dept_id 有且仅有一个值insert into tb_user(user_id, user_name) select regist_id,user_name from user_regist where status = 1
光有数据库,数据还不行,总不能随便来个人就删表删库,操作数据,故而就需要DCL语言了,DCL是用来管理数据库用户,访问权限的语言。废话不多说,直接上常用语句语法
use mysql;
先将数据库切换到mysql;b、查询用户select * from user;
create user '用户名'@'主机名' identified by '密码';
alter user '用户名'@'主机名' identified with mysql_native_password by '密码';
drop user '用户名'@'主机名';
mysql的权限级别分全局(可以管理整个MySQL)、数据库(管理指定的数据库)、数据表(管理指定的表)、字段(管理指定数据库的指定表的指定字段),常用的权限如下图:
show grants for '@'主机名';
grant 权限列表 on 数据库.表名 to '用户名'@'主机名';
此处若是想富裕全库全表的权限,则数据库.表名可用*.*代替,如grant
revoke 权限列表 on 数据库.表名 from '用户名'@'主机名'
flush privileges;
CREATE USER 'nmj'@'localhost' IDENTIFIED BY '123456';
grant select,insert,update,delete,create,alter on test.* to 'nmj';
grant all privileges on test.* to 'nmj'@'%' identified by "123456" with grant option;
此文是转载上班之余,经过三个晚上历时十多个小时整理所学知识而得(可能您觉得太久,没办法,初学,很多知识还未贯通,而且不常用CSDN,有些生疏了),创作不易,如需转载,还望注明出处。
权限图来源与文章
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。