Mysql基础之SQL语句

news2024/11/26 13:36:00

作定期复习和查询用,打开这篇博客提高效率,避免回视频或者百度上找

👂 无论你多怪异我还是会喜欢你(《刺客伍六七》动画推广版片尾曲) - 周子琰 - 单曲 - 网易云音乐

内容来自B站黑马Mysql,检索使用

附上链接05. 基础-SQL-通用语法及分类_哔哩哔哩_bilibili

目录

🍈通用语法

🍉DDL

🌳DDL -- 数据库操作

🌳DDL -- 表操作 -- 创建&查询

🌳DDL -- 数据类型及案例

🌳DDL -- 表操作 -- 修改&删除

🍈图形化界面工具DataGrip

🍉DML

🌳DML -- 插入

🌳DML -- 更新和删除

🍉DQL

🌳DQL -- 基础查询

🌳DQL -- 条件查询

🌳DQL -- 聚合函数

🌳DQL -- 分组查询

🌳DQL -- 排序查询

🌳DQL -- 分页查询

🌳DQL -- 案例练习

🌳DQL -- 执行顺序

🌳DQL小结

🍉DCL

🌳DCL -- 用户管理

🌳DCL -- 权限控制

🌳DCL小结

🥔总结


🍈通用语法

SQL分类

sql不区分大小写 

🍉DDL

🌳DDL -- 数据库操作

[]内容可省略

🌳DDL -- 表操作 -- 创建&查询

查询👇                                           创建👇

 下面通过DDL -- 表操作 -- 创建下面列表

!!注意,不要在系统库里执行任意操作,在创建表之前,一定要先切回自定义数据库👇

mysql> use itcast;
Database changed

🌳DDL -- 数据类型及案例

MySQL数据类型分为:
数值类型,字符串类型,日期时间类型

数值类型

精度是整个数值的长度,标度是小数位数,比如123.45,精度5,标度2 

字符串类型

例子:char(10), varchar(10), 超过长度会报错

定长字符串char:不超过的部分,会用空格补位,即使存储1个字符,也会占用10个字符的空间

👆char性能好

变长字符串varchar:存储1个字符,就只占用1个字符的空间

👆varchar性能较差

日期类型

任务

create table emp(
	id int comment '编号',
	workno varchar(10) comment '工号',
	name varchar(10) comment '姓名',
	gender char(1) comment '性别',
	age tinyint unsigned comment '年龄',
	idcard char(18) comment '身份证号',
	entrydate date comment '入职时间'
) comment '员工表';

🌳DDL -- 表操作 -- 修改&删除

改 

删 

truncate table 表名,这种方式,表中数据也会全部删除,只是另外创建了个空表

查上面有讲

DDL总结

🍈图形化界面工具DataGrip

B站教程11. 基础-SQL-图形化界面工具DataGrip_哔哩哔哩_bilibili

博客教程 DataGrip下载安装及使用教程(详细版)_datagrip安装教程_m0_70536638的博客-CSDN博客

🍉DML

🌳DML -- 插入

DataGrip里console的代码

insert into employee(id, workno, name, gender, age, idcard, entrydate) value(1, '1', 'itheima', '男', 10, '123456789012345678', '2026-01-01');
#指定字段添加数据, 一一对应

select * from employee; #查询

insert into employee values(2,'2','张无忌','男',18,'123456789012345677','2028-12-31');
#全部字段

insert into employee values(3,'3','韦一笑','男',38,'123456789012345677','2028-12-31'),(4,'4','赵敏','女',38,'123456789012345677','2001-12-31');
#批量添加全部字段

🌳DML -- 更新和删除

update的话,可以设置为null,来删除某一字段的值

use itheima;

select * from employee;

show tables;

desc employee;

#修改id为1的数据,将name修改为itheima
update employee set name = 'itheima' where id = 1;

#修改id为1的数据,将name修改为小昭,gender修改为女
update employee set name = '小昭', gender = '女' where id = 1;

#所有员工入职信息修改为 2008-01-01
update employee set entrydate = '2008-01-01'; #不带where更新整张表

#删除gender为女的员工
delete from employee where gender = '女';
#删除所有员工
delete from employee;

双击employee表,在里面刷新可以直接看到修改后的结果,不需要

select * from employee来查询

DML总结

DML语句是数据库操作语言,主要控制数据库中,表的增删改

为了巩固,我重新敲了一遍所有操作,并观察了表中的结果👇

insert into employee(id, workno, name, gender, age, idcard, entrydate) value(3,'66','八嘎','雄',18,'123456789012345678','2022-10-01');

insert into employee values(2,'2','张无忌','男',18,'123456789012345677','2028-12-31');
insert into employee values(7,'23','Jhon','男',13,'123456789012345677','2028-12-31'),
                            (9,'55','Mike','男',34,'123456789012345677','2024-12-31');

update employee set name = '麦可', entrydate = '1998-9-9' where age = 34;

delete from employee where gender = '雄';

delete from employee;

🍉DQL

👆表格中是编写顺序,而不是执行顺序

🌳DQL -- 基础查询

初始准备

use itheima;

drop table employee;

create table emp(
    id int comment '编号',
    workno varchar(10) comment '工号',
    name varchar(10) comment '姓名',
    gender char(1) comment '性别',
    age tinyint unsigned comment '年龄',
    idcard char(18) comment '身份证号',
    workaddress varchar(50) comment '工作地址',
    entrydate date comment '入职时间'
) comment '员工表';

show tables;

insert into emp (id, workno, name, gender, age, idcard, workaddress, entrydate)
values (1, '1', '柳岩', '女', 7, '123456789012345678', '西安', '2009-01-01'),
       (2, '2', '张无忌', '男', 20, '123456745612345678', '北京', '2003-01-01'),
       (3, '3', '韦一笑', '男', 23, '123456712312345678', '上海', '2000-05-01'),
       (4, '4', '赵敏', '女', 16, '123456789012345678', '江苏', '2000-04-01'),
       (5, '5', '小昭', '女', 37, '123456789012345678', '北京', '2011-01-01'),
       (6, '6', '杨逍', '男', 20, '123456789012345678', '西安', '2003-01-01'),
       (7, '7', '范瑶', '男', 17, '123456789012345678', '江苏', '2007-01-01'),
       (8, '8', '黛绮丝', '女', 20, '123456789012345678', '上海', '2009-01-01'),
       (9, '9', '范凉凉', '女', 20, '123456789012345678', '北京', '2000-03-01'),
       (10, '10', '陈友谅', '男', 20, '123456789012345678', '北京', '2000-02-01'),
       (11, '11', '张士诚', '男', 33, '123456745612345678', '北京', '2000-07-01'),
       (12, '12', '常遇春', '男', 20, '123456789012345678', '江苏', '2000-05-01'),
       (13, '13', '张三丰', '男', 12, '123456789012365478', '北京', '2000-01-01'),
       (14, '14', '灭绝', '女', 20, '123456789012345678', '天津', '2017-01-01'),
       (15, '15', '胡青牛', '男', 55, '123456712312345678', '上海', '2022-01-01'),
       (16, '16', '周芷若', '女', 49, '123456789012345678', '北京', '2000-01-01');

update emp set idcard = null where id = 16;

开始操作

-- 基本查询
-- 1.查询指定字段 nmae, workno, age 返回
select name,workno,age from emp; #只返回了这三个字段的数据

-- 2.查询所有字段返回
select id,workno,name,gender,age,idcard,workaddress,entrydate from emp;

select * from emp; #不建议使用,效率低 且 不直观

-- 3.查询所有员工的工作地址,起别名
select workaddress as '工作地址' from emp;
select workaddress '工作地址' from emp; #as可省略

-- 4.查询公司员工的上班地址(不要重复)
select distinct workaddress '工作地址' from emp;

🌳DQL -- 条件查询

注意LIKE 占位符,模糊匹配中,_匹配单个字符,%匹配任意个字符

-- 这里用 * 代替整个字段列表,为了方便,实际开发不建议使用
-- 条件查询

-- 1.查询年龄等于 20 的员工
select * from emp where age = 20;

-- 2.年龄小于 20
select * from emp where age < 20;

-- 3.年龄小于等于 20
select * from emp where age <= 20;

-- 4.没有身份证号
select * from emp where idcard is null;

-- 5.有身份证号
select * from emp where idcard is not null;

-- 6.年龄不等于 20
select * from emp where age <> 20;
select * from emp where age != 20;

-- 7.年龄 15(包含)到20(包含)之间的
select * from emp where age >= 15 && age <= 20;
select * from emp where age >= 15 and age <= 20;
select * from emp where age between 15 and 20;
#select * from emp where age between 15 and 20; #错误--between跟最小值, and跟最大值

-- 8.性别 女 且年龄小于 25
select * from emp where age < 25 and gender = '女';

-- 9.年龄等于 33 或 49 或 55
select * from emp where age = 33 or age = 49 or age = 55;
select * from emp where age in(33, 49, 55);

-- 10.姓名为两个字的员工信息 _ %
select * from emp where name like '__'; #两个下划线表示2个字符
select * from emp where name like '___'; #3个下划线表示3个字符
-- 先修改,改1个身份证后是X结尾的出来
update emp set idcard = '12345678901234567X' where id = 5;

-- 11.查询身份证号最后一位是X
select * from emp where idcard like '%X'; #表示X之前任意, 最后为X
select * from emp where idcard like '_________________X'; #同上

-- 再弄个综合的,验证一下想法
update emp set idcard = '123456X890123456X8' where age < 25 and gender = '男';
select * from emp where idcard like '%X%X_'; #没毛病

🌳DQL -- 聚合函数

注意,null不参与聚合函数的运算

-- 聚合函数

-- 1.统计该企业员工数量
select count(*) from emp; #16
select count(id) from emp; #16
select count(idcard) from emp; #15

-- 2.统计该企业员工平均年龄
select avg(age) from emp; #24.3125

-- 3.最大年龄
select max(age) from emp; #55

-- 4.最小年龄
select min(age) from emp; #7

-- 5.西安地区 员工 年龄之和
select * from emp where workaddress = '西安'; #查询西安地区员工信息
select sum(age) from emp where workaddress = '西安'; #西安的年龄之和7+20=27

🌳DQL -- 分组查询

执行顺序 != 代码顺序

-- 1.根据性别分组,统计男性员工 和 女性员工的数量
select count(*) from emp group by gender;
select gender, count(*) from emp group by gender;

-- 2.根据性别分组,统计 ... 的平均年龄
select gender, avg(age) from emp group by gender;

-- 3.查询年龄雄安与45的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址
select workaddress, count(*) from emp where age < 45 group by workaddress;
select workaddress, count(*) from emp where age < 45 group by workaddress having count(*) >= 3;
select workaddress, count(*) address_count from emp where age < 45 group by workaddress having address_count >= 3;

🌳DQL -- 排序查询

-- 排序查询
-- 1.根据年龄对公司员工升序(降序)排序
select * from emp order by age asc;
-- select * from emp order by age; -- 默认升序
select * from emp order by age desc;


-- 2.根据入职时间,对员工降序排序
select * from emp order by entrydate desc;

-- 3.根据年龄对公司员工升序排序,年龄相同,按入职时间降序排序
select *  from emp order by age asc, entrydate desc;

-- 年龄升序,时间也升序
select *  from emp order by age asc, entrydate asc;

🌳DQL -- 分页查询

先回顾DQL语法

👆是编写顺序,而不是执行顺序

-- 分页查询
-- 1.查询第一页员工数据,每页展示10条记录
select * from emp limit 0, 10;
select * from emp limit 10; -- 等价

-- 2.查询第2页员工数据,每页展示10条记录
-- 起始索引 (页码 - 1) * 页展示记录数
select * from emp limit 10, 10;

🌳DQL -- 案例练习

注意!limit分页放语句最后!

-- ------------------- DQL 语句练习 -------------------
-- 1.查询年龄20,21,22,23岁女性职工信息
select * from emp where gender = '女' and age in(20,21,22,2);

-- 2.查询性别 男 年龄20-40(含)以内的姓名 3个字 的员工
select * from emp where age between 20 and 40 and name like '___' and gender = '男';
select * from emp where (age between 20 and 40) and (name like '___') and (gender = '男');

-- 3.统计员工表中,年龄小于60岁的,男性和女性员工的人数
select gender, count(*) from emp where age < 60 group by gender;

-- 4.查询所有年龄小于等于35的员工的姓名和年龄,并对查询结果按年龄升序排序,年龄相同则按入职时间降序
select name, age from emp where age <= 35 order by age asc, entrydate desc;

-- 5.查询性别 男,且年龄在20-40(含)以内的前5个员工信息,对查询结果按年龄升序,年龄相同按入职时间升序
-- 关键:前5个员工,也就是查询第1页,每页展示5条记录
-- 注意:limit分页要放最后
select * from emp where gender = '男' and (age between 20 and 40) order by age asc, entrydate desc limit 5 ;

🌳DQL -- 执行顺序

-- 查询年龄>15的员工的姓名,年龄,并根据年龄进行升序排序
select name, age from emp where age > 15 order by age asc;
-- select name, age from emp where age > 15 order by age;

-- 执行顺序 1.from2.where3.group by4.select5.order by6.limit
-- 先执行from再执行where, 所以别名e在e.age处生效了
-- 先执行select再执行order by,所以别名eage在order by后生效了
-- 起别名的方式来验证执行顺序
select e.name ename, e.age eage from emp e where e.age > 15 order by eage asc;

🌳DQL小结

🍉DCL

🌳DCL -- 用户管理

-- 创建用户 itcast, 只能在当前主机localhost访问,密码123456
create user 'itcast'@'localhost' identified by '123456';

-- 创建用户 heima, 可以在任意主机访问该数据库,密码123456
create user 'heima'@'%' identified by '123456';

-- 修改用户 heima 的访问密码为1234
alter user 'heima'@'%' identified with mysql_native_password by '1234';

-- 删除 itcast@localhost 用户
drop user 'itcast'@'localhost';

在命令行中输入mysql -u itcast -p或者mysql -u heima -p表示使用MySQL命令行工具连接到MySQL数据库,并使用指定的用户名进行身份验证。

  • mysql 是MySQL命令行工具的可执行文件
  • -u 是选项,用于指定要使用的用户名。在这两个命令中,分别指定了itcastheima作为用户名
  • -p 也是选项,用于提示输入密码。在命令中加上-p后,系统会提示你输入密码,然后连接到MySQL数据库

🌳DCL -- 权限控制

-- 查询权限
show grants for 'heima'@'%';

-- 授予权限
grant all on itcast.* to 'heima'@'%';

-- 撤销权限
revoke all on itcast.* from 'heima'@'%';

-- *.*表示所有数据库所有表的所有权限,类似于超级管理员

🌳DCL小结

🥔总结

SQL语句是Mysql基础中最为重要的一部分,务必多敲多练,在项目中融会贯通

暂时打算是,速刷黑马Mysql同时重要知识点记录成4~8篇博客(供后续检索),然后再将《Mysql必知必会》过一遍,并将书本中所有案例实现一遍

至此,mysql入门完毕,为后续项目的搭建添了一块砖

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/722485.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浅析Lambda架构

大家好&#xff0c;今天我们来介绍一个用于亿级实时数据分析架构Lambda架构。 Lambda架构 Lambda架构&#xff08;Lambda Architecture&#xff09;是由Twitter工程师南森马茨&#xff08;Nathan Marz&#xff09;提出的大数据处理架构。这一架构的提出基于马茨在BackType和Tw…

Python GUI编程利器:Tkinker中的消息和文本(7)

小朋友们好&#xff0c;大朋友们好&#xff01; 我是猫妹&#xff0c;一名爱上Python编程的小学生。 和猫妹学Python&#xff0c;一起趣味学编程。 今日目标 实现下面效果&#xff1a; 消息(Message类) 消息用于显示多行文本消息&#xff0c;对标签进行替代&#xff0c;如果…

【数学建模】国赛真题分析 2012 A题 葡萄酒的评价

2012 A题 葡萄酒的评价 优秀论文地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/19WGpybgM6RncxTYhx61JRA?pwdvl22 提取码&#xff1a;vl22 –来自百度网盘超级会员V6的分享 确定葡萄酒质量时一般是通过聘请一批有资质的评酒员进行品评。每个评酒员在对葡萄酒进…

GWIN入门-完整一个程序

GWIN入门-完整一个程序 新建工程 右击工程名,添加.v文件 编写功能文件 /* timescale是Verilog HDL 中的一种时间尺度预编译指令,它用来定义模块的仿真时的时间单位和时间精度。 */`timescale 1ns/1ps module LED(input wire clk

第三步:STM32F4时钟介绍

1.0 时钟系统框图 1.1 时钟系统知识 1. STM32 有5个时钟源:HSI、HSE、LSI、LSE、PLL。 ①、HSI是高速内部时钟&#xff0c;RC振荡器&#xff0c;频率为16MHz&#xff0c;精度不高。可以直接作为系统 时钟或者用作PLL时钟输入。    ②、HSE是高速外部时钟&#xff0c;可接石英…

机器学习PCA + LogisticRegression 训练和预测 输出混淆矩阵

from sklearn.decomposition import PCA# --------------------------------------------- # 最佳主成分数量 pca = PCA(n_components=None) pca.fit_transform(x_train) var_values = pca.explained_variance_ratio_def select_best_components(var_, goal_var):best_componen…

flutter3.7版本下使用flutter boost解决使用platview崩溃或异常问题

背景 工程使用了混合开发&#xff0c;使用flutter boost插件&#xff0c;flutter 的activity1 frament1 跳转activity2 frament2&#xff0c;frament1 包含platformView&#xff0c;按照上面老哥解决崩溃问题的基础上&#xff0c;出现activity2 frament2返回activity1 framen…

百度--搜索引擎是怎么实现的--如何制作一个搜索浏览器

1.搜索引擎是怎么实现的&#xff1f; 搜索引擎是通过以下步骤实现的&#xff1a; 网页抓取&#xff08;Crawling&#xff09;&#xff1a;搜索引擎会使用网络爬虫&#xff08;Web Crawler&#xff09;自动地从互联网上抓取网页内容。爬虫按照一定的规则遍历网页并提取网页内容…

数组之前缀和

1.前缀和 前缀和的概念:前缀和是指数组中从开始位置到当前位置的所有位置的元素之和,它可以通过累加数组元素来计算,一般来说,我们可以使用前缀和数组在常数时间复杂度内计算任意区间的和. 注意:特别是需要频繁的计算区间和的情况,可以通过先预先计算前缀和数组,可以将时间复…

经典神经网络(7)DenseNet及其在Fashion-MNIST数据集上的应用

经典神经网络(7)DenseNet及其在Fashion-MNIST数据集上的应用 1 DenseNet的简述 DenseNet不是通过更深或者更宽的结构&#xff0c;而是通过特征重用来提升网络的学习能力。 ResNet 的思想是&#xff1a;创建从“靠近输入的层” 到 “靠近输出的层” 的直连。而DenseNet 做得更…

idea取消右侧边缘提示信息;IDEA使用心得:工作区右边框提示信息

idea的提示是很人性的&#xff0c;合理使用一定程度上也会提升个人的编码水平 最终效果&#xff1a;能看到weak warning个数&#xff0c;但侧边栏不会显示直接清爽 但是idea在检查代码时有一种警告叫做weak warning 什么是weak warning 图中这种只是其中一种&#xff0c;这种…

导出本地文件(模板)

/*** 导出模板*/GetMapping("export/template")ApiOperationSupport(order 16)ApiOperation(value "导出模板")public void exportTemplate(HttpServletResponse response) {List<JointExcel> list new ArrayList<>();ClassPathResource cl…

Fortran 中的 goto 语句

注意项 避免滥用&#xff1a;Fortran 90引入了结构化编程的概念&#xff0c;切记不要滥用goto语句明确标签&#xff1a;在使用goto语句时&#xff0c;标签要明确避免跳转过多&#xff1a;过多的跳转会增加代码的复杂性和可读性避免跳转到循环内部&#xff1a;在循环内部使用go…

力扣 93. 复原 IP 地址

题目来源&#xff1a;https://leetcode.cn/problems/restore-ip-addresses/description/ C题解&#xff1a;递归回溯法。 递归参数&#xff1a;因为不能重复分割&#xff0c;需要ind记录下一层递归分割的起始位置&#xff1b;还需要一个变量num&#xff0c;记录ip段的数量。递…

【设计模式】第二十章:解释器模式详解及应用案例

系列文章 【设计模式】七大设计原则 【设计模式】第一章&#xff1a;单例模式 【设计模式】第二章&#xff1a;工厂模式 【设计模式】第三章&#xff1a;建造者模式 【设计模式】第四章&#xff1a;原型模式 【设计模式】第五章&#xff1a;适配器模式 【设计模式】第六章&…

中国移动九天毕昇部署fastchat Ubuntu18.04+torch1.13.1+cuda11.6+python3.9

8核CPU,RAM32G 时间&#xff1a;2023年7月 项目地址:GitHub - lm-sys/FastChat: An open platform for training, serving, and evaluating large language models. Release repo for Vicuna and FastChat-T5. 体验地址:https://chat.lmsys.org/ 时间20230703&#xff0c;fas…

【Web3】Web3连接到以太坊网络(测试网、主网)

目录 什么是Web3 Web3项目连接以太坊网络 1.下载Web3 2.实例化Web3对象 3.infura 获取连接以太坊网络节点 4.添加网络节点 什么是Web3 web3.js开发文档&#xff1a;web3.js - Ethereum JavaScript API — web3.js 1.0.0 documentation web3.js 中文文档 : web3.js - 以…

【观察】技术创新+以行践言双管齐下,戴尔科技加速边缘计算落地

众所周知&#xff0c;随着混合多云的快速发展&#xff0c;来自百行千业的用户都在通过混合多云的策略推进加速企业的数字化转型&#xff0c;其中边缘计算由于能够在靠近数据生成的地点和位置就近提供计算、网络、智能等关键能力&#xff0c;其不仅正成为构建“云边端”一体化的…

实验:验证TCP套接字传输的数据不存在数据边界

来源&#xff1a;《TCP/IP网络编程》 学习ing 自己动手&#xff0c;把坑踩一遍&#xff0c;也可以学习到很多。 Linux环境下: 客户端&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <…

23西安电子科技大学人工智能学院821考研录取情况

23西安电子科技大学人工智能学院821考研录取情况 01、人工智能学院各个方向 02、23人工智能学院一志愿考研录取情况总览、均分 PS&#xff1a;智能院23年院线相对于22年院线下降很多分&#xff0c;对于广大考生来说是一个好事 PS&#xff1a;1、总成绩均分在330-345之间&#…