SQL超详细解析

目录

·SQL通用语法

·SQL分类

·DDL-数据库定义语言

1、DDL-数据库操作-查询

查询所有数据库

查询当前数据库

2、DDL-数据库操作-创建

创建数据库

3、DDL-数据库操作-删除

4、DDL-数据库操作-使用

5、DDL-表操作-查询:

查看当前数据库的所有表名称

查询当前表结构

查询指定表的建表语句

6、DDL-表操作-创建

创建表

注意:

数据类型:

数值类型:

字符串:

6.日期时间类型

7、DDL-表操作-修改

往表结构添加字段

修改字段

删除字段

修改表名

8、DDL-表操作-删除

·DML-数据库操作语言

DML-添加数据

给指定字段添加数据

给全部字段添加数据

批量添加数据

DML-修改数据

DML-删除数据

注意:

·DQL

语法结构:

基本查询

1、查询指定字段 name , woekno , age 返回

2、查询所有字段返回

3、查询所有员工的工作地址,起别名 as

4、查询公司员工的上班地址(不要重复,即去重操作distinct)

条件查询(WHERE)

1、语法

2、条件

3、例子

聚合函数(count,max,min,avg,sum)

1、介绍

2、常用的聚合函数

3、语法

4、例子

分组查询(GROUP BY)

1、语法

2、where和having的区别

3、例子

排序查询(ORDER BY)

1、语法

2、排序方式

3、例子

分页查询(LIMIT)

1、语法

#注意

2、例子

DQL的执行顺序

·DCL-数据控制语言

DCL-管理用户

1、查询用户

2、创建用户

3、修改用户密码

4、删除用户

DCL-权限控制

常用权限

1、查询权限

2、授予权限

3、撤销权限

#注意


·SQL通用语法

1、SQL语句可以单行或者多行书写,以分号结尾

2、SQL语句可以使用空格/缩进增强可读性

3、MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。

4、注释:

·单行注释:--注释内容 或 #注释内容 (MySQL特有)

·多行注释:/*注释内容*/

·SQL分类

主要分四类:

  • 数据定义语言(DDL):用于创建、修改或删除数据库中的对象,如表、索引、视图等。常用的命令包括CREATE、ALTER、DROP等。12
  • 数据操作语言(DML):用于在数据库表中插入、修改或删除数据。主要命令包括INSERT、UPDATE、DELETE。12
  • 数据查询语言(DQL):用于从数据库表中检索数据。最常用的命令是SELECT,它允许从表中检索数据,并支持各种条件查询。12
  • 数据控制语言(DCL):用于控制对数据库的访问权限。主要命令包括GRANT和REVOKE,用于授予或撤销用户对数据库的访问权限。

·DDL-数据库定义语言

1、DDL-数据库操作-查询

查询所有数据库

SHOW DATABASES; #(show后面的空格可以是一个也可以是多个,前提是先进入数据库)

查询当前数据库

SELECT DATABASE();

2、DDL-数据库操作-创建

创建数据库

CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];

#[]中的都是可选项,CREATE DATABASE 数据库名 是最基础的创建代码

3、DDL-数据库操作-删除

DROP DATABASE [IF EXISTS] 数据库名;

#如果没有加if exists时删除未存在的数据库就会被报错

4、DDL-数据库操作-使用

USE 数据库名;

5、DDL-表操作-查询:

查看当前数据库的所有表名称

show tables;

查询当前表结构

查看表的部分信息,但是很有结构,简单查看用这句

DESC 表名;

查询指定表的建表语句

可以看到该表的所有信息,详细查看可以用这句

SHOW CREATE TABLE 表名;

6、DDL-表操作-创建

创建表

首先要在自定义的数据库中执行创建命令:

样式:

create table 表名(

字段1 字段1类型[COMMENT 字段1注释],

字段2 字段2类型[COMMENT 字段2注释],

......

字段n 字段n类型[COMMENT 字段3注释]

)[COMMENT 表注释];

例子:

create table tb_user(

id int comment "编号",

name varchar(50) comment "姓名",

age int comment "年龄",

gender varchar(1) comment "性别"

) comment "用户表";

注意:

# varchar(50)里面是这个变量的最大长度,使用char和varchar需要,

#且char的性能比varchar较高,因为使用varchar时需要根据字符长度计算存储空间。

比如:

定义用户名时,一般会显示用户名不得超过50字符,用char还是varchar好呢,当然是varchar,因为用户名长度不确定。

用户名定义:username varchar(50)

定义性别时,不是男就是女,长度一定,所以使用。

性别定义:char gender char(1)

数据类型:
数值类型:

类型

大小

范围(有符号)

范围(无符号)

用途

TINYINT

1 Bytes

(-128,127)

(0,255)

小整数值

SMALLINT

2 Bytes

(-32 768,32 767)

(0,65 535)

大整数值

MEDIUMINT

3 Bytes

(-8 388 608,8 388 607)

(0,16 777 215)

大整数值

INT或INTEGER

4 Bytes

(-2 147 483 648,2 147 483 647)

(0,4 294 967 295)

大整数值

BIGINT

8 Bytes

(-9,223,372,036,854,775,808,9 223 372 036 854 775 807)

(0,18 446 744 073 709 551 615)

极大整数值

字符串:

MySQL数据类型

含义

char(n)

固定长度,最多255个字符

varchar(n)

固定长度,最多65535个字符

tinytext

可变长度,最多255个字符

text

可变长度,最多65535个字符

mediumtext

可变长度,最多2的24次方-1个字符

longtext

可变长度,最多2的32次方-1个字符

6.日期时间类型

MySQL数据类型

大小

含义

date

3

日期 '2008-12-2' 日期值

YEAR

1

1901 年份值

time

3

时间 '12:25:36' 时间或持续时间

datetime

8

日期时间 '2008-12-2 22:06:44' 混合日期和时间值

timestamp(不常用)

4

自动存储记录修改时间 混合日期和时间值 时间戳

7、DDL-表操作-修改

往表结构添加字段

ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];

例:

为emp表增加一个新的字段“昵称”为niname

alter table emp add nickname varchar(20) comment "昵称";

修改字段

修改制定字段数据类型

ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度)

修改字段名和字段类型

ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];

alter table emp change niname username varchar(30) comment "用户名";

删除字段

ALTER TABLE 表名 DROP 字段名;

alter table emp drop username;

修改表名

ALTER TABLE 表名 RENAME TO 新表名

alter table emp rename to emploee

8、DDL-表操作-删除

只删除表

DROP TABLE [IF EXISTS] 表名;

删除表后并重新创建该表
TRUNCATE TABLE 表名;

使用这个指令的目的:可以清空表中的数据而保留表的结构。

·DML-数据库操作语言

用来实现对数据库中数据记录进行增删改操作的。

DML-添加数据

给指定字段添加数据

INSERT INTO 表名 (字段名1,字段名2...) VALUES (值1,值2,...)

给全部字段添加数据

INSRET INTO 表名 VALUES(值1,值2...)

批量添加数据

INSERT INTO 表名 (字段名1,字段名2...) VALUES (值1,值2,...)(值1,值2,...)(值1,值2,...)

INSERT INTO 表名 VALUES (值1,值2,...)(值1,值2,...)(值1,值2,...)

例:

指定字段:insert into book(book_id,book_num,book_name,book_price,book_author) values(7,100,'桃花源记',24,'无名氏');

全部字段:insert into book values(8,'易筋经',10000,'少林寺',10);

DML-修改数据

UPDATE 表名 SET 字段名1 = 值1,字段名2 = 值2,...[WHERE 条件];

update book set book_name = '东方不败',book_num = 9 where id = 1;

DML-删除数据

DELETE FORM 表名 [WHERE 条件]

注意:

·where条件可以有也可以没有,没有就是删除整张表的所有数据。

·DELETE语句不能删除某一个字段的值(可以使用UPDATE让该字段为null)

·DQL

语法结构:

SELECT 
  字段列表
FROM
  表名列表
WHERE
  条件列表
GROUP BY
  分组字段列表
HAVING
  分组后条件列表
ORDER BY
  排序字段列表
LIMIT
  分页参数

基本查询

1、查询指定字段 name , woekno , age 返回

elsect name,workno,age form emp;

2、查询所有字段返回

elsect id, workno , name, gender ,age, idcard,workaddress,entrydate from emp;

elsect * from emp; #最好少用,因为不直观且效率低,开发文档不会让使用。

3、查询所有员工的工作地址,起别名 as

select workaddress as '工作地址' from emp; # as可以省略

4、查询公司员工的上班地址(不要重复,即去重操作distinct)

select distinct workaddress '工作地址' from emp;

条件查询(WHERE)

1、语法

SELECT 字段列表 FROM 表名 WHERE 条件列表;

2、条件

可以是比较运算符或者逻辑运算符

3、例子

判断年龄等于88的

select * from emp where age = 88;

判断idcard的值为null的

select * from emp where idcard is null;

select * from emp where idcard is not null;

多个条件 && 或 and 或 or

select * from emp where age >= 15 and gender = '女';

LIKE模糊匹配,_匹配单个字符,%匹配多个字符

查询姓名为两个字的员工

select * from emp where name like ''; # 这里打了两个下划线_ _ ,不是很明显_

查询身份证最后一位为x

select * from emp where idcard like '%x';

聚合函数(count,max,min,avg,sum)

1、介绍

将一列数据作为一个整体,进行纵向计算。

2、常用的聚合函数

# null是不计入计算的,

函数

功能

count

统计数量

max

最大值

min

最小值

avg

平均值

sum

求和

3、语法

select 聚合函数(字段列表) from 表名;

4、例子

count : select count(*) from emp; #这是求有多少个数据

avg: select avg(age) from emp;

统计西安地区员工的年龄之和

select sum(age) from emp where woekaddress = '西安'

分组查询(GROUP BY)

1、语法

SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组时候的过滤条件]

2、where和having的区别

·执行的时间:where是在分组前进行源数据的过滤,不满足条件不能参与分组,having是分组后对结果进行过滤

·判断条件不同:where不能对聚合函数进行判断,而having可以

3、例子

根据性别分组,统计男性员工和女性员工数量

select gender ,count(*) from emp group by gender;

根据性别分组,统计男性员工和女性员工平均年龄

select gender ,avg(age) from emp group by gender;

查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址

select workaddress ,count(address) from emp where age<45 group by workaddress having count(*) >= 3;

排序查询(ORDER BY)

1、语法

SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2 排序方式2;

#支持多字段排序,在排序过程中,如果字段1相同,则根据字段2排序。

2、排序方式

ASC:升序(默认值)

DESC:降序

3、例子

根据年龄进行升序排序

select * from emp order by age asc; #asc可以省略

根据年龄进行升序排序,年龄相同则按照入职时间进行降序排序

elect * from emp order by age asc ,entrydate desc ;

分页查询(LIMIT)

1、语法

SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数;

#注意

·起始索引从0开始,起始索引 = (查询页码 - 1) * 每页显示记录数。

·分页查询是数据库的方言,方言指每个数据库中不一样的地方,mysql中分页使用limit。

·如果查询第一页可以省略起始索引,直接简写为limit 10。

2、例子

查询第二页员工数据,每页显示10条记录

select * from emp limit 1,10;

DQL的执行顺序

编写顺序                        执行顺序
SELECT        
  字段列表                        5
FROM
  表名列表                        1                       
WHERE
  条件列表                        2
GROUP BY
  分组字段列表                     3
HAVING
  分组后条件列表                   4
ORDER BY
  排序字段列表                     6
LIMIT
  分页参数                         7

·DCL-数据控制语言

用来管理数据库用户、控制数据库的访问权限

DCL-管理用户

1、查询用户

USE mysql;

SELECT * from

2、创建用户

CREATE USER '用户名'@'主机名' indentified by '密码';

例子:

创建用户haha,只能在localhost 访问,密码是 '123456';

create user 'haha'@'localhost' indentified by '123456';

创建用户keke,可以在任意主机 访问,密码是 '123456';

create user 'keke'@'%' indentified by '123456';

3、修改用户密码

ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';

alter user 'haha'@'localhost' identified with mysql_native_password by '1234';

4、删除用户

drop user'用户名'@'主机名';

DCL-权限控制

常用权限

权限

说明

ALL,ALL PRIVILEGES

所有权限

SELECT

查询数据

INSERT

插入数据

UPDATE

修改数据

DELETE

删除数据

ALTER

修改表

DROP

删除数据库/表/视图

CRATE

创建数据库/表

1、查询权限

SHOW GRANTS FOR '用户名'@'主机名';

2、授予权限

GRAND 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';

3、撤销权限

REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';

#注意

·多个权限之间,使用逗号分隔

·授权时,数据库名和表名可以使用 * 进行通配,代表所有。

  • 60
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MyBatis的动态SQL是指在SQL语句中根据条件动态地拼接SQL字符串的能力。这个特性可以帮助开发者避免手动拼接SQL字符串时容易出现的错误,比如忘记空格或逗号。动态SQL可以通过使用OGNL表达式进行解析来实现。OGNL是一种表达式语言,可以在MyBatis中使用来创建动态SQL。如果需要在动态SQL中使用除了OGNL表达式以外的变量,可以使用bind标签来创建这些变量。例如,在一个select语句中,可以使用bind标签创建一个名为"pattern"的变量,其值为"'%' + _parameter.getTitle() + '%'",然后在SQL语句中使用#{pattern}来引用这个变量。另外,MyBatis还提供了一些动态标签,比如if标签,可以根据条件来动态地生成SQL语句的一部分。例如,在一个select语句中,可以使用if标签来判断name是否为空,如果不为空,则在SQL语句中添加一个条件。总之,MyBatis的动态SQL功能可以帮助开发者更灵活地生成SQL语句,根据不同的条件动态地拼接SQL字符串。 #### 引用[.reference_title] - *1* [Mybatis动态sql](https://blog.csdn.net/weixin_52394141/article/details/125862192)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [mybatis之动态sql详细)](https://blog.csdn.net/xjszsd/article/details/121924231)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猿究院-Cu-Sn合金

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值