SQL概述及简单查询语句
Posted 遥岑.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL概述及简单查询语句相关的知识,希望对你有一定的参考价值。
SQL概述
SQL(Structured Query Language)是结构化查询语言,它是对关系型数据库的操作语言。
它可以应用到所有关系型数据库中,例如:mysql、Oracle、SQL Server等。
虽然SQL可以用在所有关系型数据库中,但很多数据库还都有标准之后的一些语法,我们可以称之为方言。例如MySQL中的LIMIT语句就是MySQL独有的方言,其它数据库都不支持。
语法要求
- SQL语句可以单行或多行书写,以分号结尾
- 可以用空格和缩进来来增强语句的可读性
- 关键字不区别大小写,建议使用大写
SQL分类
DDL
DDL(Data Definition Language):数据定义语言。
用来定义数据库对象:库、表、列等。
- 创建数据库
create database 数据库名;
- 切换数据库
use 数据库名;
- 删除数据库
drop database 数据库名;
- 创建表格
create table 表名(
列名 列数据类型,
列名 列数据类型,
......
)
给表添加列:alter table 表名 add (列名 数据类型);
修改列的数据类型:alter table 表名 modify 列名 新数据类型;
修改列名:alter table 表名 change 旧列名 新列名 数据类型;
删除列:alter table 表名 drop 列名;
修改表名:alter table 表名 rename to 新名称;
DML
DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据)。
- 插入语句:向表中插入记录
insert into 表名(列1,列2,...) values(值1,值2...)
- 修改表的记录
update 表名 set 列名1 = 值1,列名2=值2,... [where 条件];
- 删除表格记录
delete from 表名 [where 条件];
DCL
DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别。
- 创建用户
CREATE USER ‘用户名’@地址 IDENTIFIED BY '密码';
- 查看用户权限
SHOW GRANTS FOR ‘用户名’@地址;
- 删除用户
DROP USER ‘用户名’@地址;
- 修改用户密码
use mysql;
alter user '用户名'@localhost identified by '新密码';
DQL
DQL(Data Query Language):数据查询语言,用来查询记录(数据)。
语法:
select 列名 --> 要查询的列名称
from 表名 --> 要查询的表名称
where 条件 --> 行条件
group by 分组列 --> 对结果分组
having 分组条件 --> 分组后的行条件
order by 排序列 --> 对结果分组
limit 起始行, 行数 --> 结果限定
查询记录
- 简单查询
select 列名1,列名2,... from 表名;
若要查询所有列,可以用通配符 * 代替所有列
- 条件查询
select 列1,列2,... from 表名 where 条件;
between…and… :在两个值之间
in(集合):在集合范围内
is NULL: 是否是空值
and: 与
or : 或
not: 取反
- 模糊查询
模糊查询:SELECT 列 FROM 表名 WHERE 某列 Like 条件;
‘%’:表示任意0个或多个字符
‘_’:任意单个字符
- 字段查询
去掉重复记录:
DISTINCT
将Null转换为指定的值:IFNULLL(列名,值)
给列添加别名:as
注意:
如果表中两列的类型都是数值类型,可以做加运算。如果有一个字段不是数值类型,就会出错。
SELECT *, sal+comm FROM emp;
若comm列有很多记录的值为NULL,任何东西与NULL相加结果还是NULL,所以结算结果可能会出现NULL。
使用把NULL转换成数值0的函数IFNULL:
SELECT *, sal+IFNULL(comm,0) FROM emp;
- 对查询结果进行排序
select 列 from 表名 [where 条件] order by 列名 asc/desc
- 聚合函数
COUNT():统计指定列不为NULL的记录行数;
SELECT COUNT(*) AS cnt FROM emp;
MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
- 分组查询
group by
- having子句:对分组结果进行筛选
where是对分组前的数据进行筛选,不满足条件的记录不进行分组
having是对分组后的数据进行筛选,必须和group by结合使用,不能单独使用
- 分页查询
select 列 from 表名 [where 条件] limit 起始行索引,查询的行数
LIMIT
:分页查询,用来限定查询结果的起始行和查询行数,是MySQL独有的
多表连接查询
内连接:内连接仅选出两张表中互相匹配的记录
外连接:既包括两张表匹配的记录,也包括不匹配的记录。
- 左外连接:又称为左连接,查询结果中包含左边表中所有的记录,右边表中没有匹配的记录显示为NULL。
select 列 from 左表 left join 右表 on 条件
- 右外连接:又称为右连接,包含右边表中所有的记录,左边表中没有匹配的记录显示为NULL
select 列 from 左表 right join 右表 on 条件
笛卡尔积:是两张表的并集
子查询
子查询是多表连接查询的一种实现方式。
在一个select语句的from子句或where子句中嵌套了另一个select语句。
外层的SELECT查询语句称为主查询,WHERE或FROM中的查询语句称为子查询。
常用指令
- 修改mysql的登陆密码
set password for 用户名@localhost = password('新密码'); -->5.0版本
set password for 用户名@localhost = '新密码'; -->8.0版本
alter user 'root'@'localhost' identified by '123456'; -->8.0版本
- 操作数据库的指令
show databases; --> 显示所有数据库
use 数据库名; -->切换数据库
show tables; -->显示数据库下的所有表格
desc 表名; -->显示表结构
select database(); -->查看当前使用的数据库
create database 数据库名; -->创建数据库
drop database 数据库名; -->删除数据库
source sql脚本文件名; --> 执行sql脚本文件
路径分割符:
windows系统路径分隔符是:" \\ "
Linux系统的路径分隔符是: " / "
以上是关于SQL概述及简单查询语句的主要内容,如果未能解决你的问题,请参考以下文章
SSM-MyBatis-05:Mybatis中别名,sql片段和模糊查询加getMapper