SQL(八):SQL基础语法

这篇具有很好参考价值的文章主要介绍了SQL(八):SQL基础语法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Docker运行MySQL

$ docker run --name local-mysql -p 3306:3306 --privileged -v /path/mysql/conf.d:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql
[mysqld]

default-time_zone = '+8:00'

示例数据库源

employee data (large dataset, includes data and test/verification suite)

SQL 简介

什么是空值?

空值不同于零值或包含空格的字段,具有空值的字段是在创建记录时留空的字段

SQL 约束

用于限制可以进入表中的数据类型,约束可以是列级别,也可以是表级别(列级约束应用于一列;表级约束应用于整个表)

约束 描述
NOT NULL 保证列中数据不能有 NULL 值
DEFAULT 提供该列数据未指定时所采用的默认值
UNIQUE 保证列中的所有数据各不相同
PRIMARY KEY 主键 唯一标识数据表中的行/记录
FOREIGN KEY 外键 唯一标识其他表中的一条行/记录,一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY
CHECK 此约束保证列中的所有值满足某一条件
INDEX 索引 用于在数据库中快速创建或检索数据

数据完整性

  • 实体完整性:表中没有重复行。
  • 域完整性:通过限制值的类型、格式或范围来强制执行给定列的有效条目。
  • 引用完整性:不能删除其他记录使用的行。
  • 用户定义的完整性:强制执行一些不属于实体、域或引用完整性的特定业务规则。

数据库规范化

  • 消除冗余数据,例如,将相同的数据存储在多个表中。
  • 确保数据依赖关系是有意义的。

SQL 语法

SELECT DISTINCT

用于仅返回不同的(different)值

示例:文章来源地址https://www.toymoban.com/news/detail-541894.html

-- 查询员工分哪些岗位
SELECT DISTINCT title
FROM titles;
title             |
------------------+
Senior Engineer   |
Staff             |
Engineer          |
Senior Staff      |
Assistant Engineer|
Technique Leader  |
Manager           |

示例:

-- 查询有多少个岗位分工
SELECT COUNT(DISTINCT title)
FROM titles;
COUNT(DISTINCT title)|
---------------------+
                    7|

示例:

-- 查询有多少个岗位分工
SELECT COUNT(DISTINCT title) as count
FROM titles;
count|
-----+
    7|

WHERE、运算符

WHERE 子句用于提取满足指定标准的记录

算术运算符

运算符 描述
+、-、*、/、% 加、减、乘、除、余

比较运算符

运算符 描述
= 等于
<> 不等于。 注意:在某些版本的 SQL 中,这个操作符可能写成!=
< 大于
> 小于
>= 大于等于
<= 小于等于
!< 不小于
!> 不大于

逻辑运算符

运算符 描述
BETWEEN 在某个范围内
LIKE 搜索某种模式
IN 为列指定多个可能的值
OR
AND
NOT
IS NULL 用于将值与NULL值进行比较,为空
IS NOT NULL 用于将值与NULL值进行比较,不为空
ALL 用于将值与另一个值集中的所有值进行比较
ANY 用于根据条件将值与列表中的任何适用值进行比较
EXISTS 用于搜索指定表中是否存在满足特定条件的行

示例:

select 2 * salary as salary
from salaries;

示例:

-- 【=】条件查询(查询岗位为Senior Engineer的数据)
SELECT *
FROM titles
WHERE title = 'Senior Engineer';

-- 【<>、!=】条件查询(查询岗位不为Senior Engineer的数据)
SELECT *
FROM titles
WHERE title <> 'Senior Engineer';

SELECT *
FROM titles
WHERE title != 'Senior Engineer';

-- 【>=、<=、AND、BETWEEN】条件查询(查询薪资在 salary >= 140700 AND salary <= 141000 的数据)
SELECT *
FROM salaries
WHERE salary >= 140700
  AND salary <= 141000;

SELECT *
FROM salaries
WHERE salary BETWEEN 140700 AND 141000;

-- 【>、<、OR、AND】条件查询(查询薪资为 salary > 158000 OR (salary > 40010 AND salary < 40012) 的数据)
SELECT *
FROM salaries
WHERE salary > 158000
   OR (salary > 40010 AND salary < 40012);

-- 【LIKE】条件查询(查询岗位中后缀带Engineer的岗位数据)
SELECT DISTINCT title
FROM titles
WHERE title LIKE '%Engineer';

-- 【in】条件查询(查询为开发或销售部门的数据)
SELECT *
FROM departments
WHERE dept_name IN ('开发', '销售');

-- 【=、in】条件查询(查询在开发部门的员工管理者姓名)
SELECT emp_no, first_name, last_name
FROM employees
WHERE emp_no in (SELECT emp_no
                 FROM dept_manager
                 WHERE dept_no in (SELECT dept_no
                                   FROM departments
                                   WHERE dept_name = '开发'));

-- 【not】条件查询(查询部门不为开发的数据)
SELECT *
FROM departments
WHERE NOT dept_name = '开发';

-- 【not、in】条件查询(查询部门不为开发和销售的数据)
SELECT *
FROM departments
WHERE NOT dept_name in ('开发', '销售');

示例(allin):

-- 查询【salary <= 155000】的【薪资数据】
select salary
from salaries
where salary <= 155000;

-- 查询【salary >= 【all (salary <= 155000)中最大值】】的【员工编号】
select distinct emp_no
from salaries
where salary >= all (select salary from salaries where salary <= 155000);

-- 查询【员工信息】在【【salary >= 【all (salary <= 155000)中最大值】】的【员工编号】】中的【员工信息数据】
select *
from employees
where emp_no in (select emp_no from salaries where salary >= all (select salary from salaries where salary <= 155000));
+--------+
| salary |
+--------+
|  60117 |
|  62102 |
|  66074 |
......

+--------+
| emp_no |
+--------+
|  43624 |
|  47978 |
| 109334 |
| 253939 |
| 254466 |
+--------+
5 rows in set (0.68 sec)

+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date  |
+--------+------------+------------+-----------+--------+------------+
|  43624 | 1953-11-14 | Tokuyasu   | Pesch     | M      | 1985-03-26 |
|  47978 | 1956-03-24 | Xiahua     | Whitcomb  | M      | 1985-07-18 |
| 109334 | 1955-08-02 | Tsutomu    | Alameldin | M      | 1985-02-15 |
| 253939 | 1957-12-03 | Sanjai     | Luders    | M      | 1987-04-15 |
| 254466 | 1963-05-27 | Honesty    | Mukaidono | M      | 1986-08-08 |
+--------+------------+------------+-----------+--------+------------+
5 rows in set (1.12 sec)

示例(exists):

-- 查询【员工表】在【【薪资表中存在的数据】并且【薪资大于155000】】的【员工信息数据】 
select *
from employees
where exists (select * from salaries where emp_no = employees.emp_no and salary > 155000);
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date  |
+--------+------------+------------+-----------+--------+------------+
|  43624 | 1953-11-14 | Tokuyasu   | Pesch     | M      | 1985-03-26 |
|  47978 | 1956-03-24 | Xiahua     | Whitcomb  | M      | 1985-07-18 |
| 109334 | 1955-08-02 | Tsutomu    | Alameldin | M      | 1985-02-15 |
| 253939 | 1957-12-03 | Sanjai     | Luders    | M      | 1987-04-15 |
| 254466 | 1963-05-27 | Honesty    | Mukaidono | M      | 1986-08-08 |
+--------+------------+------------+-----------+--------+------------+
5 rows in set (0.38 sec)

示例(any):

-- 查询【员工编号 在【薪资大于等于155000的员工编号数据中】】的【员工信息数据】
select *
from employees
where emp_no = any (select distinct emp_no from salaries where salary >= 155000);
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date  |
+--------+------------+------------+-----------+--------+------------+
|  43624 | 1953-11-14 | Tokuyasu   | Pesch     | M      | 1985-03-26 |
|  47978 | 1956-03-24 | Xiahua     | Whitcomb  | M      | 1985-07-18 |
| 109334 | 1955-08-02 | Tsutomu    | Alameldin | M      | 1985-02-15 |
| 253939 | 1957-12-03 | Sanjai     | Luders    | M      | 1987-04-15 |
| 254466 | 1963-05-27 | Honesty    | Mukaidono | M      | 1986-08-08 |
+--------+------------+------------+-----------+--------+------------+
5 rows in set (0.40 sec)

ORDER BY 关键字

用于按升序或降序对结果集进行排序,默认情况下按升序排序记录(ASC升序、DESC降序)

示例(创建表):

create table order_table
(
    id      int auto_increment comment 'ID' primary key,
    date_01 date null comment '日期 01',
    date_02 date null comment '日期 02'
);

select *
from order_table;
+----+------------+------------+
| id | date_01    | date_02    |
+----+------------+------------+
|  1 | 2023-07-01 | NULL       |
|  2 | 2023-07-02 | NULL       |
|  3 | 2023-07-03 | 2023-07-07 |
|  4 | 2023-07-03 | 2023-07-09 |
|  5 | 2023-07-03 | 2023-07-08 |
|  6 | 2023-07-06 | NULL       |
|  7 | 2023-07-05 | NULL       |
|  8 | 2023-07-04 | NULL       |
+----+------------+------------+
8 rows in set (0.00 sec)

示例(排序):

-- date_01按正序排列,date_02按倒序排列
select *
from order_table
order by date_01 ASC, date_02 DESC;
+----+------------+------------+
| id | date_01    | date_02    |
+----+------------+------------+
|  1 | 2023-07-01 | NULL       |
|  2 | 2023-07-02 | NULL       |
|  4 | 2023-07-03 | 2023-07-09 |
|  5 | 2023-07-03 | 2023-07-08 |
|  3 | 2023-07-03 | 2023-07-07 |
|  8 | 2023-07-04 | NULL       |
|  7 | 2023-07-05 | NULL       |
|  6 | 2023-07-06 | NULL       |
+----+------------+------------+
8 rows in set (0.00 sec)

INSERT INTO

用于向表中插入新的数据行

示例:

-- 使用另一个表填充一个表
insert into order_table (date_01, date_02)
SELECT from_date, to_date
FROM dept_manager;

select *
FROM order_table;
+----+------------+------------+
| id | date_01    | date_02    |
+----+------------+------------+
|  1 | 2023-07-01 | NULL       |
|  2 | 2023-07-02 | NULL       |
|  3 | 2023-07-03 | 2023-07-07 |
|  4 | 2023-07-03 | 2023-07-09 |
|  5 | 2023-07-03 | 2023-07-08 |
|  6 | 2023-07-06 | NULL       |
|  7 | 2023-07-05 | NULL       |
|  8 | 2023-07-04 | NULL       |
|  9 | 1985-01-01 | 1991-10-01 |
| 10 | 1991-10-01 | 9999-01-01 |
| 11 | 1985-01-01 | 1989-12-17 |
......
| 31 | 1992-09-08 | 1996-01-03 |
| 32 | 1996-01-03 | 9999-01-01 |
+----+------------+------------+
32 rows in set (0.01 sec)

NULL Values(空值)

具有NULL值的字段是没有值的字段,NULL 值与 0 或者包含空白(spaces)的字段是不同的,需要使用IS NULLIS NOT NULL
运算符来判断比较null

示例:

select *
from order_table
where date_02 is null;
+----+------------+---------+
| id | date_01    | date_02 |
+----+------------+---------+
|  1 | 2023-07-01 | NULL    |
|  2 | 2023-07-02 | NULL    |
|  6 | 2023-07-06 | NULL    |
|  7 | 2023-07-05 | NULL    |
|  8 | 2023-07-04 | NULL    |
+----+------------+---------+
5 rows in set (0.00 sec)

示例:

select *
from order_table
where date_02 is not null;
+----+------------+------------+
| id | date_01    | date_02    |
+----+------------+------------+
|  3 | 2023-07-03 | 2023-07-07 |
|  4 | 2023-07-03 | 2023-07-09 |
|  5 | 2023-07-03 | 2023-07-08 |
+----+------------+------------+
3 rows in set (0.00 sec)

UPDATE

更新表中已存在的记录

示例:

-- 修改Staff为普通员工
update titles
set title = '普通员工'
where title = 'Staff';
+--------+-----------------+------------+------------+
| emp_no | title           | from_date  | to_date    |
+--------+-----------------+------------+------------+
|  10001 | Senior Engineer | 1986-06-26 | 9999-01-01 |
|  10002 | 普通员工          | 1996-08-03 | 9999-01-01 |
|  10003 | Senior Engineer | 1995-12-03 | 9999-01-01 |
|  10004 | Engineer        | 1986-12-01 | 1995-12-01 |
|  10004 | Senior Engineer | 1995-12-01 | 9999-01-01 |
|  10005 | Senior Staff    | 1996-09-12 | 9999-01-01 |
|  10005 | 普通员工          | 1989-09-12 | 1996-09-12 |
|  10006 | Senior Engineer | 1990-08-05 | 9999-01-01 |
|  10007 | Senior Staff    | 1996-02-11 | 9999-01-01 |
|  10007 | 普通员工          | 1989-02-10 | 1996-02-11 |
......

Delete

用于删除表中现有记录

示例:

delete
from order_table
where date_02 is null;
+----+------------+------------+
| id | date_01    | date_02    |
+----+------------+------------+
|  3 | 2023-07-03 | 2023-07-07 |
|  4 | 2023-07-03 | 2023-07-09 |
|  5 | 2023-07-03 | 2023-07-08 |
+----+------------+------------+
3 rows in set (0.00 sec)

到了这里,关于SQL(八):SQL基础语法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 渗透测试-SQL注入之核心语法获取数据库信息

    SQL实验室第一关 下载sqli-labs到phpstudy的www目录下 打开localhost/sqli-labs运行即可 (1)注入语句 ‘~’ 相当于16进制的0x7e 万能密码 \\\'or ‘1’ =\\\'1 ’ and ‘1’=‘1 ’ and 1=2 union select 1,user(),3- -+ 前面加’是为了闭合后面的’ (2)group_concat(string) (1)SQL手工注入方法 select schema_name

    2024年02月10日
    浏览(38)
  • 关系数据库-9-[mysql8]中的语法校验规则sql_mode应用

    Mysql中sql_mode使用详解 sql_mode是一组mysql的语法校验规则,定义了mysql应该支持的sql语法、数据校验等。 1.3.1 ANSI模式 这是一种宽松模式,该模式下,会对所操作数据进行校验,如果不符合校验规则,数据会按照规则执行,并报warning警告。 1.3.2 STRICT_TRANS_TABLES模式 这是一种严格

    2024年02月02日
    浏览(46)
  • 【JaveWeb教程】(17) MySQL数据库开发之 MySQL简介、安装、数据类型、SQL通用语法 详细代码示例讲解

    在我们讲解SpringBootWeb基础知识(请求响应案例)的时候,我们讲到在web开发中,为了应用程序职责单一,方便维护,我们一般将web应用程序分为三层,即:Controller、Service、Dao 。 之前我们的案例中,是这样子的请求流程:浏览器发起请求,先请求Controller;Controller接收到请求之

    2024年01月25日
    浏览(63)
  • 【MySQL】MySQL PHP 语法,PHP MySQL 简介,查询,下载 MySQL 数据库, SQL 教程

    作者简介: 辭七七,目前大一,正在学习C/C++,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 MySQL 可应用于多种语言,包括 PERL, C, C++, JAVA 和 PHP,在这些语言中,MySQL 在 PHP 的 web 开发中是应用最广泛。 我们

    2024年02月11日
    浏览(56)
  • 数据库基础——数据库、数据表和SQL语句

    数据库是用来存储、管理数据的仓库 数据表是数据的存储结构 Structured Query Language,结构化查询语言,用来操作数据库 安装MySQL,自行百度 进入cmd使用命令 mysql -hAddress -uUser -p(Password) 登录数据库 -p后直接回车可进入密文登录 如果出现以下报错,则打开任务管理器-服务-开启

    2024年02月09日
    浏览(72)
  • 【数据库】SQL语言基础

    SQL:结构化查询语言。使用SQL命令,给出几个用户参数,系统根据这些参数从底层数据库提取结果。这个过程是封装了的,结构化的。其主要功能概括为: 数据定义功能:create , drop, alter 对表头结构的建,删,改 数据查询:select 最主要应用的,最复杂部分 数据操纵:inser

    2024年02月04日
    浏览(33)
  • 数据库入门-----SQL基础知识

    目录 📖前言: 📑SQL概述通用语法:  🐳DDL: 🐻操作数据库: 🐞数据类型:  🦉操作表: 🦦DML: 语法规则: 案例演示: 🦏DQL: 语法规则: 案例演示: # 基础查询:  # 条件查询:  #聚合函数:  # 分组查询:  #排序查询:  #分页查询:  执行顺序: 🫎DCL: 语法规则:

    2024年04月10日
    浏览(53)
  • MySQL数据库基础(九):SQL约束

    文章目录 SQL约束 一、主键约束 二、非空约束 三、唯一约束 四、默认值约束 五、外键约束(了解) 六、总结 PRIMARY KEY 约束唯一标识数据库表中的每条记录。 主键必须包含唯一的值。 主键列不能包含 NULL 值。 每个表都应该有一个主键,并且每个表只能有一个主键。 遵循原

    2024年02月19日
    浏览(56)
  • MySQL数据库基础(五):SQL语言讲解

    文章目录 SQL语言讲解 一、SQL概述 二、SQL语句分类 1、DDL 2、DML 3、DQL 4、DCL 三、SQL基本语法 1、SQL语句可以单行或多行书写,以分号结尾 2、可使用空格和缩进来增强语句的可读性 3、MySQL数据库的SQL语句不区分大小写,建议使用大写  4、可以使用单行与多行注释 四、总

    2024年02月19日
    浏览(54)
  • SQL Server数据库 -- 表的基础查询

    一、单表查询基本结构 二、单表查询结构语法 select 聚合函数 where 模糊查询 order by group by having 三、多表查询基本结构 四、多表查询结构语法 内连接 自连接 外连接 五、总结         学习了数据库,在以后公司等地方,你可能不会用到创建数据库或者表格,但是你一定会使

    2024年02月11日
    浏览(92)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包