一、SQL概念
Windows版mysql的安装:下载链接
图形化sql操作软件(DBeaver):下载链接
SQL语言的分类
由于数据库管理系统(数据库软件)功能非常多,不仅仅是存储数据,还要包含:数据的管理、表的管理、库的管理、账户的管理、权限管理等。
所以,操作数据库的SQL语言,也基于功能,可以分为四类:
- 1.数据定义:DDL(Data Definition Language)
- 库的创建删除、表的创建删除
- 2.数据操作:DML(DataManipulation Language)
- 新增数据、删除数据、修改数据等
- 3.数据控制:DCL(Data Control Language)
- 新增用户、删除用户、密码修改、权限管理等
- 4.数据查询:DQL(Data Query Language)
- 基于需求查询和计算数据
SQL的语法特征
- SQL语法,大小写不敏感
- SQL可以单行或多行书写,最后以
;号结束 - SQL支持注释:
- 单行注释:– 注释内容(– 后面要有空格)
- 单行注释:# 注释内容(# 后面可以不加空格,推荐加上)
- 多行注释:/* 注释内容 */
二、SQL基本语法
1、数据库基本操作
登录数据库(mysql):
mysql -u用户 -p密码 #-u后面跟用户 -p后面跟密码,没有空格
例如:
mysql -uroot -powaspbwa
基本查看语法
查看当前数据库用户:
select user();
查看所有数据库:
show databases;
使用库:
use 库名;
查看当前所在库:
select database();
查看所有表:
show tables;
/* 在不切换库的时候用show tables FROM 库名; */
查看表结构:
desc 表名;
查看创建表sql语句:
show create table 表名; #最后面加\G可以以行方式显示
三、DQL(数据查询)
查询语句最后加上\G; 可以以行的方式更直观显示,例如:select * from users\G;
基础语法:select 列 from 表 [where 条件判断];
查询所有字段:
select * from 表名;
查询指定字段:
select username,password from users;
条件查询:
select * from users where username='admin';
逻辑与:
select * from users where id=1 and username='admin'; #两个条件都要满足
逻辑或:
select * from users where id=1 or username='admin1'; #只需要满足一个条件
/***
在不切换库的时候直接查询使用:select 列 from 库名.表名 [where 条件判断];
***/
排序分页
排序基础语法:select 列 from 表 [where 条件判断] order by 列 [asc|desc];
(order by 列,以这里的列为排序对象,asc为升序,desc为降序)
分页基础语法:select 列 from 表 [where 条件判断] limit 显示数量;
排序分页嵌套:select 列 from 表 [where 条件判断] order by 列 [asc|desc] limit 显示数量;
四、DDL(库、表操作)
库操作
查看有哪些数据库show databases;
使用数据库use 数据库名称
创建数据库create database 数据库名称 charset utf8;
删除数据库drop database 数据库名称;
查看当前是使用的数据库select database();
表操作
查看有哪些表(需要先选择数据库)show tables;
删除表drop table 表名称;drop table if exists 表名称;
创建表
create table 表名称(
列名称 列类型,
列名称 列类型
):
/*
列类型有
int -- 整数
float -- 浮点型
varchar(长度) --文本,长度为数字,做最大长度限制
date -- 日期类型
timestamp -- 时间戳类型
*/
五、DML(数据操作)
DML是指数据操作语言,英文全程是Data Manipulation Language ,用来对数据库表中记录进行更新。插入insert 删除delete 更新update
数据插入 insert
基础语法:insert into 表[(列1,列2,....列n)] values(值1,值2,....值n),(值1,值2,....值n)...,(值1,值2,....值n)
示例:
# 创建表
create table test_table(
ID int,
name varchar(20),
age int
);
# 仅插入id列数据
insert into test_table(ID) values(10001),(10002),(10003);
# 插入全部列数据
insert into test_table(ID,name,age) values(10001,"周杰伦",31),(10002,"王力宏",33),(10003,"林俊杰",26);
# 插入全部列数据,快捷写法
insert into test_table values(10001,"周杰伦",31),(10002,"王力宏",33),(10003,"林俊杰",26);
数据删除 delete
删除行
基础语法 :delete from 表 [where 条件判断];
示例:
# 删除name为王五的数据
delete from test_table where name="王五"
# 删除ID>=10005的数据
delete from test_table where ID>=10005
数据更新 update
基础语法:update 表 set 列=值 [where 条件判断];
示例:
# 修改age列的全部数据为30
update test_table set age=30
# 修改ID为10004的name为李四
update test_table set name="李四" where ID=10004
六、UNION
UNION 主要功能是把两个或者更多 SELECT 语句的结果集合并成一个结果集。
示例:
-- 第一条语句
SELECT user, password FROM mysql.user;
-- 第二条语句
SELECT user, password FROM dvwa.users;
-- 联合查询
SELECT user, password FROM mysql.user
UNION
SELECT user, password FROM dvwa.users;
UNION的使用前提:
- 列的数量和顺序:参与 UNION 操作的所有 SELECT 语句,其选择的列数量必须相同,并且列的顺序也要一致。
- 数据类型:对应的列的数据类型应该是兼容的,这样才能保证合并结果的正确性。(可以数据类型不一样)
- 去重:UNION 操作默认会去除合并结果中的重复行。如果想保留所有行,包括重复行,可以使用 UNION ALL。
UNION 与 UNION ALL 的区别:
- UNION:会对合并后的结果集进行去重处理,也就是只保留唯一的行。
- UNION ALL:不会进行去重操作,会直接把所有结果集合并在一起,即使有重复行也会全部保留。所以 - - -UNION ALL 的执行效率通常比 UNION 高,因为它不需要进行去重操作。
适用场景:
- 数据合并:当需要把多个表中结构相同的数据合并成一个结果集时,UNION 就非常有用。
- 数据统计:在进行数据统计时,可能需要从不同的数据源中获取数据并合并,这时也可以使用 UNION。
- SQL注入攻击:帮助攻击者从数据库中获取额外的信息或者猜测sql列数
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 tanglx@aliyun.com