当前位置: 首页 > web >正文

2.MySQL基础:SQL语句

一 SOL通用语法

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

2.SQL语句可以使用空格或缩进来增强语句的可读性。

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

4.注释

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

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

5.[ ]代表可选选项


二 DDL

1.是什么

数据定义语言,用来定义数据库对象(数据库,表,字段)。

2.语法(数据库操作)

1.查询

(1)查询所有数据库

(2)查询当前数据库

补充:有括号,是函数。

2.创建

补充:字符集。

 MySQL数据库中不建议设置utf8,使用utf8mb4。

3.删除

4.使用

3.语法(表操作)

1.查询

注意:要先使用指定数据库才行。

(1)查询当前数据库所有表

(2)查询表结构

(3)查询指定表的建表语句

2.创建

(1)创建表语法

注意:最后一个字段后面没有逗号。

(2)数据类型

分数是正的,一位小数即可。double要指定两个参数,第1个参数是整个长度,100.0最长4位,第2个参数是小数位数。

补充:精度和标度

123.45:精度5,标度(小数位数)2

char(10)和varchar(10)超出10个字符就会报错。 

补充:char(10)和 varchar(10)的区别

char 存一个字符也会占用10个字符的空间,其他用空格补位,性能高。varchar 存一个字符就占一个字符的空间,存两个就占两个的空间,性能低,因为要根据内容计算空间。

(3)综合运用

3.添加字段

为emp表增加一个新的字段”昵称”为nickname类型为varchar(20):

4.修改

(1)修改字段数据类型

(2)修改字段名和字段类型

将emp表的nickname字段修改为username,类型为varchar(30) :

(3)修改表名

将emp表的表名修改为 employee:

5.删除

(1)删除字段

将emp表的字段username删除:

(2)删除表

如果存在就删除,不存在就不删,不报错。

(3)删除指定表并重新创建该表

只留下了表结构,删除了里面的数据。 

比如恢复出厂设置。


三 DML

1.是什么

数据操作语言,用来对数据库表中的数据进行增删改。

2.语法

1.添加(插入)数据

(1)给指定字段添加数据

字段1对应值1,字段2对应值2。

(2)给全部字段添加数据

表名后面没有跟有字段名,因为要给所有的字段赋值。

值1是表中第1个字段的值,值2是表中第2个字段的值。

(3)批量添加数据

当前表中指定字段进行批量添加数据

当前表中所有字段进行批量添加数据

(4)注意

插入数据的时候,指定字段的顺序和值的顺序要一一对应

插入的值是字符串或者日期型数据,应该包含在引号中。

插入的数据大小要在字段的规定范围内。

某个字段是varchar(10),插入的字符串长度就不能超过10。

(5)案例

打开后编写对应的SQL语句。

2.修改数据

注意:如果没有条件,会修改整张表的所有数据。

修改 id 为1 的数据,将 name 修改为 itheima


修改 id 为1 的数据,将 name 修改为小昭,gender 修改为女

将所有的员工入职日期修改为 2008-01-01

3.删除数据

注意:

1.DELETE语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据2.DELETE语句不能删除某一个字段的值(可以使用UPDATE)。

删除 gender 为女的员工

删除所有员工


四 DQL

1.是什么

数据查询语言,用来查询数据库中表的记录。

2.语法

1.基本查询

(1)查询多个字段

查询表格中指定字段

查询表格中全部字段

(2)设置别名

as可以省略

(3)去除重复记录

对查询返回的字段进行去重。

(4)案例

 

查询指定字段 name,workno,age 返回

select name,workno,age from emp;

查询所有字段返回

select * from emp;

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

select workaddress  '工作地址'  from emp;

查询公司员工的上班地址(不要重复)

select distinct workaddress from emp;

2.条件查询

(1)比较运算符

(2)逻辑运算符

多个条件通过逻辑运算符进行组装。

(3)案例

查询年龄等于 88 的员工

select * from emp where age=88;


查询年龄小于 20 的员工信息

select * from emp where age<20;


查询年龄小于等于 20 的员工信息

select * from emp where age<=20;


查询没有身份证号的员工信息

select * from emp where idcard is null;


查询有身份证号的员工信息

select * from emp where idcard is not null;


查询年龄不等于 88 的员工信息

select * from emp where age!=88

select * from emp where age<>88


查询年龄在15岁(包含)到20岁(包含)之间的员工信息

select * from emp where age>=15 and age <=20;

select * from emp where age>=15 a&& age <=20;

select * from emp where age between 15 and 20;


查询性别为女 且年龄小于 25岁的员工信息

select * from emp where gender='女' and age<25;


查询年龄等于18或20或 40 的员工信息

select * from emp where age=18 or age=20 or age=40;

select * from emp where age in (18,20,40);


查询姓名为两个字的员工信息

select * from emp where name like '__';

查询身份证号最后一位是X的员工信息

select * from emp where idcard like '%X'

select * from emp where idcard like '_________________X'

3.分组查询 select from group by

补充:聚合函数 count max min avg sum

聚合函数是将一列数据作为一个整体,进行纵向的计算。

统计该企业员工数量

select count(id) from emp;

如果是select count(idcard) from emp;查询结果是15,因为聚合函数所有的null值不参与聚合函数的运算。


统计该企业员工的平均年龄

select avg(age) from emp;


统计该企业员工的最大年龄

select max(age) from emp;


统计该企业员工的最小年龄

select min(age) from emp;

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

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

分组字段名:根据哪个字段进行分组。

两个条件:where 和 having 。where用来对分组之前的数据进行过滤,如果不满足where条件则不参与group by分组,having是对分组后的结果进行过滤。where不能使用聚合函数,having可以。

执行顺序:where>聚合函数>having

where在分组之前进行过滤,分组的时候执行聚合函数,having是分组聚合后进行过滤。

分组后查询的字段一般为聚合函数和分组字段,查询其他字段没有意义。

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

①先写基础查询的语法:select * from emp;

②根据性别分组:select * from emp group by gender;

③统计数量用count聚合函数:select count(*) from emp group by gender;

④ 增加性别的字段:select gender,count(*) from emp group by gender;


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

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


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

①分组前:查询年龄小于45的员工 select * from emp where age<45;

②根据工作地址分组:select * from emp where age<45 group by workaddress;

③获取员工数量:select count(*) from emp where age<45 group by workaddress;

根据工作地址进行分组,获取每个工作地址的员工数量。

select workaddress,count(*) from emp where age<45 group by workaddress;

④ 员工数量大于等于3的工作地址:分组后过滤。

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

补充:取别名。 

4.排序查询 select from order by

排序方式: ASC:升序(默认值) DESC:降序

如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。

根据年龄对公司的员工进行升序排序。

select * from emp order by age asc;


根据入职时间,对员工进行降序排序。

select * from emp order by entrydate desc;


根据年龄对公司的员工进行升序排序,年龄相同,再按照入职时间进行降序排序。

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

5.分页查询 limit

补充:查询页码。

补充:方言。

数据库和数据库之间不同的地方。MySQL 和 Oracle 之间有差异。

查询第1页员工数据,每页展示10条记录。

select * from emp limit 0,10;

select * from emp limit 10;


查询第2页员工数据,每页展示10条记录。

select * from emp limit 10,10;

3.练习

查询年龄为20,21,22,23岁的员工信息。

select * from emp where age in (20,21,22,23);


查询性别为 男 ,并且年龄在 20-40 岁(含)以内的姓名为三个字的员工。

select * from emp where gender = '男',age>=20 and age <=40,name like '___';

select * from emp where gender = '男' and age>=20 and age <=40 and name like '___';

select * from emp where gender = '男' and age between 20 and 40 and name like '___';

select * from emp where gender = '男' and (age between 20 and 40) and name like '___';

括号是为了更直观。

统计员工表中,年龄小于60岁的,男性员工和女性员工的人数。

select gender,sum(gender) from emp where age < 60 group by gender;

select gender,count(*) from emp where age < 60 group by gender;

查询所有年龄小于等于35岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按入职时间降序排序。

select name,age from emp where age <= 35 order by age asc,entrydate desc ;

查询性别为男,且年龄在20-40 岁(含)以内的前5个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序。

select * from emp where gender='男',age>=20 and age <=40 order by age ,entrydate  ;

查询前5个员工是查询第1页的员工,每一页只展示5条记录。

select * from emp where gender='男' and age>=20 and age <=40 order by age ,entrydate limit 5;

4.执行顺序

编写顺序:

执行顺序:

5.小结


五 DCL

1.是什么

数据控制语言,用来控制数据库用户、控制数据库的访问权限。

2.语法

1.用户管理

1.查询用户

用户的信息,用户权限的信息都存放在系统数据库的MySQL的user表中。

2.创建用户

补充:主机名。

在哪个主机上这个用户可以访问MySQL。

 

主机名可以使用%通配,任意主机都可以访问这个MySQL服务器。

补充:只是创建了这个用户,但是没有给这个用户分配权限。

创建用户 itcast,只能够在当前主机localhost访间,密码123456;

create user 'itcast'@'localhost' identified by '123456';


创建用户 heima,可以在任意主机都访问该数据库,密码123456;

create user 'heima'@'%' identified by '123456';

3.修改用户密码

补充:mysql_native_password:加密方式。

修改用户 heima的访问密码为 1234;

alter user 'heima'@'%' identified with mysql_native_password by '1234';
 

4.删除用户

删除itcast@localhost用户;

drop user 'itcast'@'localhost';

注意:

2.权限控制

1.查询权限

show grants for 'heima'@'%';

usage:没有其他权限,仅仅能够连接并登录上MySQL而已。

补充:*.*表示所有数据库的所有表。

2.授予权限

grant all on itcast.* to 'heima'@'%';

再次查询heima的权限。

show grants for 'heima'@'%';

表示heima有针对itcast的所有权限。

3.撤销权限

补充:多个权限之间使用逗号分隔。

http://www.xdnf.cn/news/12113.html

相关文章:

  • 【Python实战】零基础实战教程(三) 变量与数据类型
  • 【Python指南】离线安装顽固复杂的第三方库指南
  • Transformers生成文本:max_new_tokens揭秘
  • 第二十三章 Shell的基础语法
  • haribote原型系统改进方向
  • 【Day44】
  • 【向量化模型如何私有化部署】一文说清原理、流程与最佳实践
  • 软件工程专业本科毕业论文模板
  • 龙虎榜——20250604
  • ‌RF Choke(射频扼流圈)
  • 2D 写实交互数字人:多终端实时交互,引领数字化浪潮
  • 告别延迟,拥抱速度:存储加速仿真应用的解决方案【1】
  • 【五子棋在线对战】二.项目结构设计 实用工具类模板的实现
  • 分享国外几个好用的ai网站
  • 普中STM32F103ZET6开发攻略(五)
  • 李沐《动手学深度学习》 | 数值稳定性
  • CATIA-CAD 拆图
  • 【优秀三方库研读】quill 开源库中的命名空间为什么要用宏封装
  • 养老实训中心建设规划:新时代养老服务人才实践能力提升工程
  • 【算法训练营Day06】哈希表part2
  • java判断一个字符串(如 str1)是否在给定的一组字符串
  • Python×AI:用LangChain快速搭建LLM应用的全栈方案
  • Vite实战指南
  • Linux容器篇、第一章_02Rocky9.5 系统下 Docker 的持久化操作与 Dockerfile 指令详解
  • SD卡通过读取bin文件替代读取图片格式文件来提高LCD显示速度
  • 半导体制冷片(Thermoelectric Cooler,TEC)
  • 深度学习Sitemap(NuxtSeo)
  • 《Offer来了:Java面试核心知识点精讲》大纲
  • 使用Prometheus实现微服务架构的全面监控
  • 慢SQL调优(二):大表查询