【SQL基础笔记】

本文标签: SQL语法 SQL分类 DDL DML DQL DCL

目录

一、SQL语法

二、SQL的分类

三、DDL

1.DDL-数据库操作

2.DDL-表操作

3.DDL-数据类型

 4.DDL-表操作

四、DML

五、DQL

1.DQL-基本查询

2.DQL-条件查询:

3.DQL-聚合函数

4.DQL-分组查询 

 5.DQL-排序查询

6.DQL-分页查询 

7.综合案例 :

8.DQL-编写顺序和执行顺序

六、DCL

1.DCL-管理用户

2.DCL-权限控制

 总结:        


一、SQL语法

  • SQL语句可以单行或多行书写,以分号结尾.
  • SQL语句可以使用空格/缩进来增强语句的可读性.
  • MySQL数据库的SQL语句不区分大小写,关键字建议使用大写.
  • 注释:   1.单行注释:  --内容  或者  #内容                                                                                                 2.多行注释:  /* 内容 */

二、SQL的分类

1、DDL :  数据定义语言,用来操作数据库、表、列等;关键词:CREATE、 ALTER、DROP.
2、DML :  数据操作语言,用来操作数据库中表里的数据;关键词:INSERT、 UPDATE、 DELETE.
3、DQL :  数据查询语言 , 用来查询数据,关键词:SELECT.

4、DCL :  数据控制语言,用来操作访问权限和安全级别;关键词:GRANT、DENY.

三、DDL

                用来操作数据库、表、列等.

1.DDL-数据库操作

1.查询
查询所有数据库:
SHOW databases;

查询当前数据库:
select databases();

2.创建
create database [if not exists] 数据库名 [default charset 字符集] [collate 排序规则];

3.删除
drop database [if exists] 数据库名;

4.使用
use 数据库名;

2.DDL-表操作

  • 表操作-查询:
1.查询当前数据库所有表
show tables;

2.查询表结构
desc 表名;

3.查询指定表的建表语言
show create table 表名;
  • 表操作-创建:
create table 表名 (
        字段1 字段1类型 [comment 字段1注释],
        字段2 字段2类型 [comment 字段2注释],
        ... 
        字段n 字段n类型 [comment 字段n注释]    
) [comment 表注释];

3.DDL-数据类型

 4.DDL-表操作

  • 表操作-修改:
1.添加字段
alter table 表名 add 字段名 类型(长度) [comment 注释] [约束];


2.修改字段名和字段类型
alter table 表名 change 旧字段名 新字段名 类型(长度) [comment 注释] [约束];

3.删除字段
alter table 表名 drop 字段名;

4.修改表名
alter table 表名 rename to 新表名;
  • 表操作-删除:

1.删除表
drop table [if exists] 表名;

删除指定表,并重新创建该表  (表中的数据也会被删除)
truncate table 表名;

四、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,...),...;
insert into 表名 values (值1,值2,...),(值1,值2,...),(值1,值2,...);
  • 修改数据:
update 表名 set 字段名1 = 值1 字段名2=值2,... where 条件; 条件可以有也可以没有,没有条件就会修改整张表的值
  • 删除数据:
delete from 表名 where 条件; 条件可以有也可以没有,没有条件就会修改整张表的值  delete 语句不能删除某一个字段(可以使用update).

五、DQL

                用来查询数据

1.DQL-基本查询

  • 查询多字段 :
1.查询多个字段 :  select 字段1,字段2,字段3 ... from 表名;
                 select * from 表名;
  • 给指定字段设置别名 : 
2.设置别名 :      select 字段1 [ as 别名1 ],字段2 [ as 别名2 ]... from 表名;
  •  去除查询的重复记录 : 
3.去除重复记录 :   select distinct 字段列表 from 表名;

 实现:

                                -- 数据准备 ---

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 '员工表';

insert into emp(id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (1, '1', '柳岩', '女', 20, '123456789012345678', '北京', '2000-01-01'),
       (2, '2', '张无忌', '男', 18, '123456789012345670', '北京', '2005-09-01'),
       (3, '3', '韦一笑', '女', 38, '123456789012345670', '上海', '2005-08-01'),
       (4, '4', '赵敏', '女', 18, '123456789012345670', '北京', '2009-12-01'),
       (5, '5', '小昭', '女', 16, '123456789012345678', '上海', '2007-07-01'),
       (6, '6', '杨逍', '男', 28, '12345678901234567X', '北京', '2006-01-01'),
       (7, '7', '范瑶', '男', 40, '123456789012345670', '北京', '2005-05-01'),
       (8, '8', '黛绮丝', '女', 38, '123456789012345670', '天津', '2015-05-01'),
       (9, '9', '范凉凉', '女', 45, '123456789012345678', '北京', '2010-04-01'),
       (10, '10', '陈友谅', '男', 53, '123456789012345670', '上海', '2011-01-01'),
       (11, '11', '张士诚', '男', 55, '123456789012345670', '江苏', '2015-05-01'),
       (12, '12', '常遇春', '男', 32, '123456789012345670', '北京', '2004-02-01'),
       (13, '13', '张三丰', '男', 88, '123456789012345678', '江苏', '2020-11-01'),
       (14, '14', '灭绝', '女', 65, '123456789012345670', '西安', '2019-05-01'),
       (15, '15', '胡青牛', '男', 70, '12345678901234567X', '西安', '2018-04-01'),
       (16, '16', '周芷若', '女', 18, null, '北京', '2012-06-01');


-- ----------------------------------查询需求 ------------------------------- --

-- 练习:
-- 1.查询指定字段 name , 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;

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

2.DQL-条件查询:

语法  :  select 字段列表 from 表名 where 条件列表;

  条件:

 实现:

# 1.查询年龄等与 88 的员工
select * from emp where age = 88;

#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. 查询年龄不等于 88 的员工信息
select * from emp where age != 88;
select * from emp where age <> 88;

#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 age<=20;

#8. 查询性别为 女 且年龄小于 25岁的员工信息
select * from emp where gender='女' and age < 25;

#9. 查询年龄等于 18 或 20 或 40 的员工信息
select * from emp where age=18 or age=20 or age=40;
select * from emp where age in (18,20,40);

#10. 查询姓名为两个字的员工信息      like'占位符' 模糊匹配:'_'匹配单个字符,'%'匹配任意个字符
select * from emp where name like '__';

#11. 查询身份证号最后一位是X的员工信息
select * from emp where idcard like '_________________X';
select * from emp where idcard like '%X';  

3.DQL-聚合函数

介绍: 将一列数据作为一个整体,进行纵向计算.

语法  : select 聚合函数 (字段列表) from 表名;
-- null值在聚合函数中不参与计算

实现:

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

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

#3. 统计该企业员工的最大年龄
select max(age) from emp;

#4. 统计该企业员工的最小年龄
select min(age) from emp;

#5. 统计西安地区员工的年龄之和
select sum(age) from emp where workaddress='西安';

4.DQL-分组查询 

1.语法 :  select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件];

# 2. where与having区别
# 执行时机不同: where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
# 判断条件不同: where不能对聚合函数进行判断,而having可以。

注意:

  • 执行顺序 : where > 聚合函数 > having.
  • 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义. 

 实现:

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

#2. 根据性别分组, 统计男性员工 和 女性员工的平均年龄
select gender,avg(age) from emp group by gender ;

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

 5.DQL-排序查询

1. 语法 select 字段列表 from 表名 order by 字段1 排序方式1,字段2 排序方式2;
2. 排序方式: ASC: 升序(默认) ; DESC: 降序

 注意:

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

实现:

#1. 根据年龄对公司员工进行升序排序
select * from emp order by age asc;
select * from emp order by age;

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

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

6.DQL-分页查询 

1. 语法 : select 字段列表 from 表名 limit 起始索引,查询记录数;

  注意:

  • 起始索引从0开始,起始索引= (查询页码-1) * 每页显示记录数.
  • 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT.
    
  • 如果查询的是第一页数据,起始索引可以省略,直接简写成 limit 10.

实现:

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

#2. 查询第2页员工数据,每页显示10条记录.
select * from emp limit 10,10;

7.综合案例 :

                                   --  案例练习 --

# 1.查询年龄为20,21,22,23岁的女性员工信息。
select * from emp where gender='女' and age in(20,21,22,23);

# 2.查询性别为男,并且年龄在20-40岁(含)以内的姓名为三个字的员工。
select * from emp where gender='男' and (age between 20 and 40) and name like '___';

# 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个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序。
select * from emp where gender='男' and (age between 20 and 40) order by age asc,entrydate asc limit 0 , 5;

 8.DQL-编写顺序和执行顺序

 DQL-编写顺序: select(字段列表) from(表名列表) where(条件列表) group up(分组字段列表) having(分组后条件列表) order by(排序字段列表) limit(分页列表);
 DQL-执行顺序: from(表名列表) where(条件列表) group up(分组字段列表) having(分组后条件列表) select(字段列表) order by(排序字段列表) limit(分页列表);

六、DCL

                 用来管理数据库 用户 , 控制数据库的访问 权限.

1.DCL-管理用户

        1.查询用户,创建用户,修改密码,删除用户:

--  ----------------------- 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.创建用户 itcast , 只能够在当前主机localhost访问,密码123456.
create user 'itcast'@'localhost' identified by '123456';

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

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

#4.删除itcast@localhost用户.
drop user 'itcast'@'localhost' ;

注意: 

  • 主机名 可以使用 % 通配.
  • 这类 SQL 开发人员操作的比较少,主要是 DBA(数据库管理员) 使用.

2.DCL-权限控制

 

-- ---------------------- DCL权限查询语法 ---------------

 1. 查询权限 : show grants for '用户名'@'主机名' ;

 2. 授予权限 : grant 权限列表 on 数据库名.表名 to '用户名'@'主机名' ;

 3. 撤销权限 : revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名' ;

实现: 

#1. 查询权限
show grants for 'heima'@'%';

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

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

 注意:

  • 多个权限之间,使用逗号分隔
  • 授权时,数据库名和表名可以使用 * 进行通配,代表所有.

 总结:        

  • SQL语法及分类
  • DDL DML DQL DCL 语法

这是一篇帮助记忆SQL基础语法的笔记. 码文不易,支持一下呗.

如有不足,还望指出. 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

让ChatGPT在中断回答的时候自动输入「请接上文继续」并发送

一、脚本内容 让ChatGPT在中断回答的时候自动输入「请接上文继续」并发送 // UserScript // name ChatGPT自动接上文继续 // namespace http://tampermonkey.net/ // version 1.3 // description 让ChatGPT在中断回答的时候自动输入「请接上文继续」并发送 /…

Elasticsearch:高级数据类型介绍

在我之前的文章 “Elasticsearch&#xff1a;一些有趣的数据类型”&#xff0c;我已经介绍了一下很有趣的数据类型。在今天的文章中&#xff0c;我再进一步介绍一下高级的数据类型&#xff0c;虽然这里的数据类型可能和之前的一些数据类型有所重复。即便如此&#xff0c;我希望…

MySQL数据同步ES的常用思路和方法

文章目录 1.同步双写2.异步双写3.定时任务4.数据订阅大家应该都在各种电商网站检索过商品,检索商品一般都是通过什么实现呢?搜索引擎Elasticsearch。 那么问题来了,商品上架,数据一般写入到MySQL的数据库中,那么用于检索的数据又是怎么同步到Elasticsearch的呢? 1.同步双…

认识Spring(下)

作者&#xff1a;~小明学编程 文章专栏&#xff1a;Spring框架 格言&#xff1a;热爱编程的&#xff0c;终将被编程所厚爱。 目录 Spring更加高效的读取和存储对象 存储bean对象 五大注解 关于五大类注解 对象的注入 属性注入 构造方法注入 Setter注入 三种注入方式的…

IPV6 资料收集

IPV6与IPV4区别 1、地址长度的区别&#xff1a;IPv4协议具有32位&#xff08;4字节&#xff09;地址长度&#xff1b;IPv6协议具有128位&#xff08;16字节&#xff09;地址长度。 2、地址的表示方法区别&#xff1a;IPv4地址是以小数表示的二进制数。 IPv6地址是以十六进制表…

4.1 读写不同数据源的数据

4.1 读写不同数据源的数据4.1.1 读写数据库数据1、数据库数据获取2、数据库数据存储4.1.2 读写文本文件1、文本文件读取2、文本文件存储4.1.3 读写Excel文件1、Excel文件读取2、Excel文件存储完整代码4.1.1 读写数据库数据 1、数据库数据获取 pandas提供了读取与存储关系型数…

为什么说网络安全行业是 IT 行业最后的红利?

一、为什么选择网络安全&#xff1f; 这几年随着我国《国家网络空间安全战略》《网络安全法》《网络安全等级保护 2.0》等一系列政策/法规/标准的持续落地&#xff0c;网络安全行业地位、薪资随之水涨船高。 未来 3-5 年&#xff0c;是安全行业的黄金发展期&#xff0c;提前踏…

Android OKHttp源码解析

Https是Http协议加上下一层的SSL/TSL协议组成的&#xff0c;TSL是SSL的后继版本&#xff0c;差别很小&#xff0c;可以理解为一个东西。进行Https连接时&#xff0c;会先进行TSL的握手&#xff0c;完成证书认证操作&#xff0c;产生对称加密的公钥、加密套件等参数。之后就可以…

jenkins打包发布前端项目

1.配置前端nodejs打包环境 1.1安装nodejs插件 1.2配置jenkins nodejs环境 2.下载git插件(使用此插件配置通过gitlab标签拉取项目) 3.创建一个自由风格的发布项目 4.配置项目构建流程 4.1添加钉钉告警 4.2配置参数化构建 4.3配置源码管理为git拉取项目 4.4配置构建环境 4.5配置…

Graphic Game(思维 + 模拟删点)

C-Graphic Game_2022年江西省大学生程序设计竞赛&#xff08;正式赛&#xff09; (nowcoder.com) Topic describes eightCirno被推荐了一个游戏&#xff0c;她决定今天和Daiyousei一起玩。最初&#xff0c;有一个具有2 n个顶点和m条边的图。在每一个转弯&#xff0c;Cirno和Da…

SpringBoot+Shiro框架整合实现前后端分离的权限管理基础Demo

记录一下使用SpringBoot集成Shiro框架实现前后端分离Web项目的过程&#xff0c;后端使用SpringBoot整合Shiro&#xff0c;前端使用vueelementUI&#xff0c;达到前后端使用token来进行交互的应用&#xff0c;这种方式通常叫做无状态&#xff0c;后端只需要使用Shiro框架根据前端…

【云原生进阶之容器】第五章容器运行时5.4--容器运行时之Firecracker

1 Firecracker诞生背景 近些年 AWS 非常推崇无服务器模式

用Cmake构建第一个C++项目

ps&#xff1a;由于工作需求&#xff0c;需要涉及到跨平台。 概念 Cmake是一个款平台的构建工具&#xff0c;可以自动生成各种不同平台和编译器的构建脚本&#xff0c;使得项目在不同平台和编译器下都能够正常构建和运行。 CMake有自己的一套语法&#xff0c;需要学习CMake的…

上海亚商投顾:两市成交创年内新高 人工智能再爆发

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪三大指数今日高开高走&#xff0c;沪指震荡反弹逼近3300点&#xff0c;创业板指午后涨超1.7%&#xff0c;科创50指数…

springboot 配置文件、多环境配置、运行优先级

前言 提问&#xff1a;springboot项目&#xff0c;开发环境、测试环境和生产环境配置文件如何分开表示&#xff1f; 答&#xff1a;多profile文件方式 1、多环境配置&#xff08;profile&#xff09; 1.1、properties文件配置 application.properties&#xff1a;主配置文…

基于html+css的between布局

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

【算法系列之动态规划IV】完全背包

完全背包 解题思路 01背包的核心思路&#xff0c;为了保证每个物品仅被添加一次&#xff0c;01背包内嵌的循环是从大到小遍历。 for(int i 0; i < weight.size(); i) { // 遍历物品for(int j bagWeight; j > weight[i]; j--) { // 遍历背包容量dp[j] max(dp[j], dp…

【云原生】k8s集群命令行工具kubectl之应用部署命令详解

kubectl应用部署命令详解一、准备工作1.1、Replication Controller1.2、Deployment1.3、DaemonSet1.4、查看创建的svc和pod1.5、kubectl 命令自动补全设置二、应用部署命令2.1、diff2.2、apply2.3、replace2.4、rollout2.4.1、history2.4.2、pause2.4.3、resume2.4.4、restart2…

Java 常量池分析

Java常量池 常量池&#xff1a;存放所有常量 常量池是Class文件中内容最为丰富的区域。常量池对于Class文件中的字段和方法解析也有着至关重要的作用。 随着Java虚拟机的不断发展&#xff0c;常量池的内容也日渐丰富。可以说&#xff0c;常量池是整个Class文件的基石。 在版…

HMC717ALP3E-ASEMI代理ADI(亚德诺)车规级芯片HMC717ALP3E

编辑-Z HMC717ALP3E参数描述&#xff1a; 频率范围&#xff1a;4.8 - 6.0GHz 增益&#xff1a;12.5dB 噪声系数&#xff1a;1.3dB 输入回波损耗&#xff1a;8dB 输出回波损耗&#xff1a;13dB 1 dB压缩的输出功率&#xff08;P1dB&#xff09;&#xff1a;12dBm 饱和输…