MySQL学习之SQL语句

SQL通用语法及分类

1.SQL语句可以单行或多行写,以分号结尾
2.SQL语句可以使用空格来增强语句的可读性
3.MySQL数据库的SQL语句不区分大小写,关键字建议大写
4.注释:单行注释:--注释内容 或 #注释内容(MySQL特有) 多行注释:/*注释内容*/

DDL:数据定义语言,用来定义数据库对象(数据库,表,字段)
DML:数据操作语言,对数据增删改
DQL:数据查询语言,用来查询数据库的内容
DCL:数据控制语言,用来控制数据库用户,控制数据库的访问权限

 DDL数据定义语言
show databases; 查询所有数据库
selectdatabase(); 查询当前数据库
create database (if not exists) 数据库名称; 创建数据库
drop database(if exists)数据库名称;  删除数据库
show tables;查询当前库中的所有表
desc 表的名字; 查询表结构
show create table 表名; 查询指定表的建表语句,比desc查询的更仔细

create table表名(
字段1 字段1类型(comment 字段1注释),
-----------------------------------------         创建一个表
字段n 字段n类型(comment 字段n注释)             
)(comment 表注释);

变长字符串 varchar(10)
定长字符串char(10) 最多存储10个字符,若只存储了一个字符也会占10个字符空间大小
区别: char性能好,varchar性能差需要在使用的时候根据内容计算分配空间用户名字这种不定长用varchar,性别等用char
date  xx年xx月xx日 time 几点:几分:几秒  year 年份 datetime 年月日时分秒
alter table 表名 add 字段名 类型(长度) (comment 注释)(约束); 添加字段
alter table 表名 modify 字段名 新数据类型(长度); 修改数据类型
alter table 表名 change 旧字段名 新字段名 类型;修改字段名和类型 
alter table 表名 drop 字段名; 删除字段
alter table 表名 rename to 新表名; 修改表名
drop table if exists 表名; 删除表
truncate table 表名; 删除指定表再创建该表
DML 数据操作语句
insert into 表名(字段1,字段2,---)values(值1,值2---); 批量添加数据
insert into 表名 values(值1,值2-----);给全部字段添加数据
注意:插入数据时指定的字段顺序需要和值的顺序一一对应,字符串和日期型数据应包含在引号内,插入的数据大小应在字段规定的范围内
update 表名 set 字段名1=值1,字段名2=值2,-----(where条件); 修改值
注意:若修改语句的条件可以有也可以没有,若没有条件则会修改整张表的所有数据  eg:update user set name=‘zhangsan’where id=10;若没有where的条件约束整张表的name都将改为zhangsan
delete from 表名(where 条件); 删除语句

 DQL数据查询语句

select
     字段列表
from
     表名列表
where
     条件列表
group by 
     分组字段列表
having
     分组后条件列表
order by
     排序字段列表
limit
      分页查询

书写顺序并不是真正的执行顺序,执行顺序是from>where>group>by>select>order>by>limit>having
select 字段1,字段2,--- from 表名; 或者 select * from 表名; 查询多个字段
select 字段1(as 别名1),字段2(as 别名2)--- from 表名; 设置别名
select distinct 字段列表 from 表名;去除重复记录并将内容展示出来
 条件
> 大于 >=大于等于 <小于 <=小于等于 <>或!=不等于 =等于 between--- (两者中小的值)and---(两者中大的值)在某个区间内
like 占位符(模糊匹配 _匹配单个字符,%匹配任意字符) is NULL  是NULL   and或者&&  并且   or 或者 || 或者    not 或者 ! 不是      in(---)在in后的列表中的值,满足一个便可
eg:1员工名字为两个字的员工信息
select * from 表名 where name like ‘_ _';
2员工身份证最后一为是X的员工信息 
 select * from 表名 where idcard like ’%X‘ 或者 like ’_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _X‘ 因为身份证为18位,所以用17个_代替
   聚合函数
count()求和    max()最大值   min()最小值    avg()平均值    sum()求和
select  聚合函数(字段列表)  from 表名;  NULL不参与聚合函数的计算
select 字段列表 from 表名 (where条件)group by 分组字段名 (having 分组后过滤条件)

where和having的区别
执行时机不同:where是在分组前进行过滤,having是在分组后进行过滤 
 判断条件不同:where后面不能跟聚合函数having后面可以跟聚合函数
注意:执行顺序:where>聚合函数>having
 select 字段列表 from 表名 order by 字段1 排序方式1,字段2,排序方式2
排序方式: 1 asc 升序(默认)  2 desc 降序  注意: 当第一个字段相同时才会根据第二个字段进行排序
select 字段列表 from 表名 limit 起始索引,查询记录数;
注意:起始索引从0开始,起始索引=(查询页码-1)* 每页的显示数,分页查询是数据库的“方言”,不同的数据库有不同的实现,mysql是limit,若查询的是第一页的数据,起始索引可省略,直接简写成limit 10
DCL数据控制语句
use mysql;
select * from user;   查询用户
create  user  ‘用户名’@‘主机名’ identified by ‘密码’;
alter user ‘用户名’@‘主机名’ identified with mysql_native_password by '新密码';
注意:主机名可以使用%%通配
这类SQL开发人员操作少,主要是DBA使用
show grants for ’用户名‘@’主机名‘;查看权限
grant 权限列表 on 数据库 . 表名  to‘用户名’@‘主机名’;授予权限
revoke 权限列表 on 数据库名 . 表名 from ‘用户’@‘主机名’;撤销权限
若想给所有表添加权限表名用*替代,多个权之间使用逗号分隔,授权时,数据库名和表名可以用*来通配代表所有
                   
all 所有权限  select 查询权限 insert 插入权限 update 修改权限 delete 删除数据 alter 修改表 drop 删除权限  create 创建权限

猜你喜欢

转载自blog.csdn.net/m0_74756975/article/details/129110479