<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>SQL语句基础</title>
</head>
<body>
<!-- 下载
在官网下载免费的社区版,账号密码一般设置为123456
-->
<!-- 数据库相关概念
数据库:存储数据的仓库,数据是有组织的进行存储,简称DB
数据库管理系统:操纵和管理数据库的大型软件,简称DBMS
SQL:操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准,简称SQL
-->
<!-- mysql的启动于暂停
注意:mysql在开机时默认是启动的
步骤:
1.以管理员命令运行cmd 或输入 -u root -p
2.输入
停止mysql:net stop mysql80
启动mysql:net start mysql80
80指的是注册到windows的系统服务的服务名称
-->
<!-- mysql的客户端连接
方法一:Mysql提供的客户端命令行工具,在开始菜单里找
方法二:系统自带的命令行工具执行指令:mysql [-h 127.0.0.1] [-P 3306] -u root -p
但方法用方法二时,需要配置PATH环境变量,新增C:\Program Files\MySQL\MySQL Server 8.0\bin
-->
<!-- 数据模型
客户端 ------------> DBMS ------------> 数据库 ------------> 表
-->
<!-- 关系型数据库(RDBMS)
概念:建立在关系模型基础上,由多张相互连接的二维表组成的数据库
特点:
1.使用表存储数据,格式统一,便于维护
2.使用SQL语言操作,标准统一,使用方便
-->
<!-- SQL语句通用语法
1.SQL语句可以单行或多行书写,以分号结尾
2.SQL语句可以使用空格/缩进来增强语句的可读性
3.MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
4.注释:
单行注释:-- 注释内容或#注释内容(MySQL特有)
多行注释:/*注释内容*/
-->
<!-- SQL分类
DDL:Data Definition Language :数据定义语言,用来定义数据库对象(数据库,表,字段)
DML:Date Manipulation Language :数据操作语言,用来对数据库表中的数据进行增删改
DQL:Data Query Language :数据查询语言,用来查询数据库中表的记录
DCL:Data Control Language :数据控制语言,用来创建数据库用户,控制数据库的访问权限
-->
<!-- DDL-数据库操作
查询:
1.查询所有数据库:SHOW DATABASES;
2.查询当前数据库:SELLECT DATABASE();
创建:CREATE DATABASE [IF NOT EXISTS] 数据库名 [DFFAULT CHARSET] 字符集 [COLLATE 排序规则];
IF NOT EXISTS 如果存在则不创建,不存在才创建
[]是可选的
删除:DROP DATABASE [IF EXISTS]数据库名;
使用:USE 数据库名;
不区分大小写
-->
<!-- DDL-表操作
查询
查询当前数据库所有表:SHOW TABLES;
查询表结构:DESC 表名;
SHOW CREATE TABLE 表名;
创建
create table 表名(
字段1 字段1类型[comment 字段1注释],
字段2 字段2类型[comment 字段2注释]
)[COMMENT 表注释];
[]为可选参数,最后一个字段后面没有逗号
-->
<!-- 数据类型
1.数值类型
tinyint:小整数值
smallint:大整数值
mediumint:大整数值
bigint:极大整数值
float:单精度浮点数值
double:双精度浮点数值
decimal:小数值(精度确定点数)
2.字符串类型
char:定长字符串
varchar:变长字符串
tinyblob:不超过255个字符的二进制数据
tinytext:短文本字符串
blob:二进制形式的长文本数据
text:长文本数据
mediumblob:二进制形式的中等长度文本数据
mediumtext:中等长度文本数据
longblob:二进制形式的极大文本数据
longtext:极大文本数据
3.日期类型
date:日期值,格式:YYYY-MM-DD
time:时间值或持续时间,格式:HH:MM:SS
year:年份值,格式:YYYY
datetime:混合日期和时间值,格式:YYYY-MM-DD HH:MM:SS
timestamp:混合日期和时间值,时间戳,格式:YYYY-MM-DD HH:MM:SS
-->
<!-- 案例 创建一个员工表
要求:
1.编号(数字)
2.员工工号(字符串类型,长度不超过10位)
3.员工姓名(字符串类型,长度不超过10位)
4.性别(男/女,存储一个汉字)
5.年龄:(正常人年龄,不可以存储负数)
6.身份证号:(二代身份证号均为18位,身份证可能有X字符)
7.入职时间:取值年月日
create table yg(
id int comment'编号',
worknum varchar(10) comment'工号',
name varchar(10) comment'姓名',
gender char(1) comment'性别',
age tinyint unsigned comment'年龄',
unsugned表示不能负数
idcard char(18) comment'身份证',
entertime date comment '入职时间'
)comment'员工表';
-->
<!-- DDL-表操作
添加字段:altertable 表名 add 字段名 类型(长度)[comment注释] [约束];
修改数据类型:altertable 表名 modify字段名 新数据类型(长度);
修改字段名和字段类型:altertable 表名 change旧字段名 新字段名 类型(长度)[comment注释][约束];
删除字段名:alter table 表名 drop字段名;
修改表名:altertable 表名 rename to新表名;
删除表:drop table [if exists]表名;
删除指定表,并重新创建该表:truncate table表名;
-->
<!-- MYSQL的图形化操作
建议下载 navicat和datagrip
步骤:1.连接数据库mysql,输入用户名和密码
-->
<!-- DML-对表中数据进行增删改
添加数据
1.给指定字段添加数据:insert into 表名(字段名1,字段名2,...) values(值1,值2,...);
2.给全部字段添加数据:insert into 表名 values(值1,值2...);
3.批量添加数据:
insert into 表名(字段名1,字段名2,...) values(值1,值2,...),(值1,值2,...),(值1,值2,...);
insert into 表名 values(值1,值2...),(值1,值2...),(值1,值2...);
注意:插入数据时,指定的字段顺序要与值的顺序是一一对应的,字符串和日期型数据应包含在引号中,插入数据的大小,应该在字段规定范围内
修改数据
update 表名 set 字段名1=值1,字段名2=值2,....[where 条件]
注意:修改语句的条件可以由,也可以没有,如果没有条件,则会修改整张表的所有数据
删除数据
delete from 表名 [where 条件]
注意:delete语句条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据
delete语句不能删除某一字段的值(可以使用update)
-->
<!-- DQL-数据库查询语言,用来查询数据库中表的记录
查询关键字:select
语法:
select
字段列表
from
表名列表
where
条件列表
group by
分组字段列表
having
分组后条件列表
order by
排序字段列表
limit
分页参数
-->
<!-- 基本查询
1.查询多个字段
select 字段1,字段2....from 表名;
select*from 表名;(查询所有字段)
2.设置别名
select 字段1[AS 别名1],字段2[as别名2]...from 表名;(AS可以省略)
3.去除重复记录
select distinct 字段列表 from 表名;
-->
<!-- 条件查询
语法:select 字段列表 from 表名 where 条件列表
例子:
1.查询年龄小于20的员工信息
select * from yg where age < 20;
2.查询没有身份证号的员工信息
select * from yg where idcard is null;
3.查询有身份证号的员工信息
select * from yg where idcard is not null;
4.查询年龄在15到20之间
select * from yg where age > = 15 and age <= 20
select* from yg where age between 15 and 20
5.查询姓名为两个字的员工信息(like占位符:模糊查询_匹配单个字符,%匹配任意字符)
select * from yg where name like'__'
6.查询身份证号最后一位是x的员工信息
select * from yg where idcard like '%X'
-->
<!-- 聚合函数
将一列数据作为应该整体,进行纵向计算
常见的聚合函数:
count:统计数量
max:最大值
min:最小值
avg:平均值
sum:求和
注意:null值不参与聚合函数运算
语法:select 聚合函数(字段列表)from 表名;
-->
<!-- 分组查询(group by)
语法:select 字段列表 from 表名 [where 条件] group by 分组字段名[having 分组后过滤条件];
where与having区别
执行时机不同:
where是分组之前进行过滤,不满足where条件,不参与分组
having是分组之后对结果进行过滤
判断条件不同:
where不能对聚合函数进行判断,而having可以
例子
1.根据性别分组,统计男和女员工数量
select gender,count(*)from yg group by gender
2.查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址
select workadress count(*) from yg where age < 45 group by workadress having count(*) >= 3;
注意:
1.执行顺序:where > 聚合函数 > having
2.分组之后,查询的字段一般位聚合函数和分组字段,查询其他字段无任何意义
-->
<!-- 排序查询
语法:select 字段列表 from 表名 order by 字段1 排序方式1,字段2 排序方式2;
排序方式:
ASC:升序(默认值)
desc:降序
注意:如果多个字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。
例子:
1.根据年龄进行升序排序
select * from yg order by age asc;
asc是默认的不写也行
2.根据年龄升序排序,年龄相同,再按照入职时间降序排序
select * from yg order by age asc,enterdata desc;
-->
<!--分页查询
语法:select 字段列表 from 表名 limit 起始索引,查询记录数;
注意:
1.起始索引从0开始,起始索引=(查询页码-1)*每页显示记录数。
2.分页查询是数据库的方言,不同的数据库有不同的实现,MySQL是limit
3.如果查询的是第一页,起始索引可以省略,直接写为limit10
例子:
1.查询第一页的员工数据,每页展示10条记录
select * from yg limit 0,10;
2.查询第三页员工数据,每页展示10条记录
select * from yg limit 20,10;
-->
<!-- DQL语句的执行顺序
from where group by having select,order by limit
-->
<!-- DCL,用来管理数据库用户,控制数据库的访问权限
管理用户
1.查询用户:
USE mysql;
select * from user;
2.创建用户
create user '用户名'@'主机名' identified by '密码';
3.修改用户密码
alter user '用户名'@'主机名' identified with mysql_native_password by '新密码';
4.删除用户
drop user '用户名'@'主机名';
例子:
1.创建用户 text ,只能在当前主机localhost访问,密码123456
create user 'text' @ 'localhost' identified by '123456'
2.创建用户 text1 ,可以在任意主机访问该数据库,密码123456
create user 'text1' @ '%' identified by '123456';
-->
<!--权限控制
all,allprivileges:所有权限
select:查询数据
insert:插入数据
update:修改数据
delete:删除数据
alter:修改表
drop:删除数据表/库/视图
create:创建数据库/表
1.查询权限
show grants for '用户名'@'主机名';
2.授予权限
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
3.撤销权限
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';
注意:多个权限之间适应逗号进行分隔,授权时,数据库名和表名可以使用*进行通配,代表所有
-->
</body>
</html>