数据库基础篇 《3. 基本的SELECT语句》

news2024/11/17 20:49:34

目录

1. SQL概述

1.1 SQL背景知识

1.2 SQL语言排行榜

1.3 SQL 分类

2. SQL语言的规则与规范

2.1 基本规则

2.2 SQL大小写规范 (建议遵守)

2.3 注释

2.4 命名规则(暂时了解)

2.5 数据导入指令

3. 基本的SELECT语句

3.0 SELECT...

3.1 SELECT ... FROM

3.2 列的别名

3.3 去除重复行

3.4 空值参与运算

3.5 着重号

3.6 查询常数

4. 显示表结构 

5. 过滤数据


1. SQL概述

1.1 SQL背景知识

1946 年,世界上第一台电脑诞生,如今,借由这台电脑发展起来的互联网已经自成江湖。在这几十年里,无数的技术、产业在这片江湖里沉浮,有的方兴未艾,有的已经几幕兴衰。但在这片浩荡的波动里,有一门技术从未消失,甚至“ 老当益壮 ,那就是 SQL
45 年前,也就是 1974 年, IBM 研究员发布了一篇揭开数据库技术的论文《 SEQUEL :一门结构
化的英语查询语言》,直到今天这门结构化的查询语言并没有太大的变化,相比于其他语言, SQL 的半衰期可以说是非常长 了。
不论是前端工程师,还是后端算法工程师,都一定会和数据打交道,都需要了解如何又快又准确地
提取自己想要的数据。更别提数据分析师了,他们的工作就是和数据打交道,整理不同的报告,以
便指导业务决策。
SQL (Structured Query Language,结构化查询语言)是使用关系模型的数据库应用语言, 与数据直接打交道 ,由 IBM 上世纪 70 年代开发出来。后由美国国家标准局(ANSI)开始着手制定 SQL 标准,先后有 SQL - 86 SQL - 89 SQL - 92 SQL - 99 等标准。
SQL 有两个重要的标准,分别是 SQL92 SQL99 ,它们分别代表了 92 年和 99 年颁布的 SQL 标准,我们今天使用的 SQL 语言依然遵循这些标准。
不同的数据库生产厂商都支持SQL 语句,但都有特有内容

1.2 SQL语言排行榜

自从 SQL 加入了 TIOBE 编程语言排行榜,就一直保持在 Top 10

1.3 SQL 分类

SQL 语言在功能上主要分为如下 3 大类:
DDL Data Definition Languages 、数据定义语言) ,这些语句定义了不同的数据库、表、视图、索引等数据库对象,还可以用来创建、删除、修改数据库和数据表的结构。
主要的语句关键字包括 CREATE DROP ALTER  等。
DML Data Manipulation Language 、数据操作语言) ,用于添加、删除、更新和查询数据库记
录,并检查数据完整性。
主要的语句关键字包括 INSERT DELETE UPDATE SELECT  等。
SELECT SQL 语言的基础,最为重要。
DCL Data Control Language 、数据控制语言) ,用于定义数据库、表、字段、用户的访问权限和安全级别。
主要的语句关键字包括 GRANT REVOKE COMMIT ROLLBACK SAVEPOINT 等。
因为查询语句使用的非常的频繁,所以很多人把查询语句 SELECT 单拎出来一类:DQL (数据查询语言)
还有单独将 COMMIT ROLLBACK 取出来称为 TCL (Transaction Control Language,事务控制语言)

2. SQL语言的规则与规范

2.1 基本规则

SQL 可以写在一行或者多行。为了提高可读性,各子句分行写,必要时使用缩进
每条命令以 ; \g \G 结束
关键字不能被缩写也不能分行
关于标点符号
必须保证所有的 () 、单引号、双引号是成对结束的
必须使用英文状态下的半角输入方式
字符串型和日期时间类型的数据可以使用单引号(' ')表示 列的别名,尽量使用双引号(" "),而且不建议省略 as

2.2 SQL大小写规范 (建议遵守)

MySQL Windows 环境下是大小写不敏感的
MySQL Linux 环境下是大小写敏感的
数据库名、表名、表的别名、变量名是严格区分大小写的
关键字、函数名、列名 ( 或字段名 ) 、列的别名 ( 字段的别名 ) 是忽略大小写的。
推荐采用统一的书写规范:
数据库名、表名、表别名、字段名、字段别名等都小写
SQL 关键字、函数名、绑定变量等都大写

2.3 注释

可以使用如下格式的注释结构
单行注释: # 注释文字 (MySQL 特有的方式 )
单行注释: -- 注释文字 (-- 后面必须包含一个空格。 )
多行注释: /* 注释文字 */  

2.4 命名规则(暂时了解)

数据库、表名不得超过 30 个字符,变量名限制为 29
必须只能包含 A–Z, a–z, 0–9, _ 63 个字符
数据库名、表名、字段名等对象名中间不要包含空格
同一个 MySQL 软件中,数据库不能同名;同一个库中,表不能重名;同一个表中,字段不能重名
必须保证你的字段没有和保留字、数据库系统或常用方法冲突。 如果坚持使用,请在SQL语句中使
用`(着重号)引起来
保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性。假如数据
类型在一个表里是整数,那在另一个表里可就别变成字符型了
举例:
# 以下两句是一样的,不区分大小写
show databases ;
SHOW DATABASES ;
# 创建表格
#create table student info(...); # 表名错误,因为表名有空格
create table student_info(...);
# 其中 order 使用 `` 飘号,因为 order 和系统关键字或系统函数名等预定义标识符重名了
CREATE TABLE `order` (

id INT ,
lname VARCHAR ( 20 )
);
select id as " 编号 " , `name` as " 姓名 " from t_stu; # 起别名时, as 都可以省略
select id as 编号 , `name` as 姓名 from t_stu; # 如果字段别名中没有空格,那么可以省略 ""
select id as 编 号 , `name` as 姓 名 from t_stu; # 错误,如果字段别名中有空格,那么不能省略 ""

2.5 数据导入指令

在命令行客户端登录 mysql ,使用 source 指令导入
mysql>  source d: \m ysqldb .sql

 

3. 基本的SELECT语句

3.0 SELECT...

SELECT 1 ; # 没有任何子句 
SELECT 9 /2; # 没有任何子句 

3.1 SELECT ... FROM

语法:
SELECT 标识选择哪些列
FROM 标识从哪个表中选择
选择全部列:
SELECT *
FROM departments;
一般情况下,除非需要使用表中所有的字段数据,最好不要使用通配符 ‘*’ 。使用通配符虽然可以节省输入查询语句的时间,但是获取不需要的列数据通常会降低查询和所使用的应用程序的效率。通配符的优势是,当不知道所需要的列的名称时,可以通过它获取它们。
在生产环境下,不推荐你直接使用 SELECT * 进行查询 
选择特定的列:
SELECT department_id, location_id
FROM departments;
MySQL 中的 SQL 语句是不区分大小写的,因此 SELECT select 的作用是相同的,但是,许多开发人员习惯将关键字大写、数据列和表名小写,读者也应该养成一个良好的编程习惯,这样写出来的代码更容易阅读和维护。

3.2 列的别名

重命名一个列便于计算紧跟列名,也可以 在列名和别名之间加入关键字 AS ,别名使用双引号 ,以便在别名中包含空格或特殊的字符并区分大小写。
AS 可以省略
建议别名简短,见名知意
举例
SELECT last_name AS name, commission_pct comm
FROM employees;

 

SELECT last_name "Name" , salary* 12 "Annual Salary"
FROM employees;  

3.3 去除重复行

默认情况下,查询会返回全部行,包括重复行。
SELECT department_id
FROM employees;  

SELECT语句中使用关键字DISTINCT去除重复行

SELECT DISTINCT department_id
FROM employees;

针对于: 

SELECT DISTINCT department_id,salary
FROM employees;

这里有两点需要注意 

1. DISTINCT 需要放到所有列名的前面,如果写成 SELECT salary, DISTINCT department_id
FROM employees 会报错。
2. DISTINCT 其实是对后面所有列名的组合进行去重,你能看到最后的结果是 74 条,因为这 74 个部门id 不同,都有 salary 这个属性值。如果你想要看都有哪些不同的部门(department_id),只需要写 DISTINCT department_id 即可,后面不需要再加其他的列名了。

3.4 空值参与运算

所有运算符或列值遇到 null 值,运算的结果都为 null
SELECT employee_id,salary,commission_pct,
12 * salary * ( 1 + commission_pct) "annual_sal"
FROM employees;
这里你一定要注意,在 MySQL 里面, 空值不等于空字符串。一个空字符串的长度是 0 ,而一个空值的长度是空。而且,在 MySQL 里面,空值是占用空间的。

3.5 着重号

错误的
mysql> SELECT * FROM ORDER ;
ERROR 1064 ( 42000 ): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'ORDER' at
line 1

正确的

 mysql> SELECT * FROM `ORDER`;

+----------+------------------+
| order_id | order_name |
+----------+------------------+
|             1 | shkstart        |
|            2 | tomcat          |
|             3 | dubbo           |
+-----------+-----------------+
3 rows in set ( 0.00 sec)
mysql> SELECT * FROM `order` ;
+------------+----------------+
| order_id | order_name  |
+----------+-------------------+
|             1 | shkstart        |
|             2 | tomcat          |
|             3 | dubbo           |
+------------+----------------+
3 rows in set ( 0.00 sec)
结论
我们需要保证表中的字段、表名等没有和保留字、数据库系统或常用方法冲突。如果真的相同,请在SQL语句中使用一对 `` (着重号)引起来。

3.6 查询常数

SELECT 查询还可以对常数进行查询。对的,就是在 SELECT 查询结果中增加一列固定的常数列。这列的取值是我们指定的,而不是从数据表中动态取出的。
你可能会问为什么我们还要对常数进行查询呢?
SQL 中的 SELECT 语法的确提供了这个功能,一般来说我们只从一个表中查询数据,通常不需要增加一个固定的常数列,但如果我们想整合不同的数据源,用常数列作为这个表的标记,就需要查询常数。
比如说,我们想对 employees 数据表中的员工姓名进行查询,同时增加一列字段 corporation ,这个字段固定值为“ 尚硅谷 ,可以这样写:

SELECT '尚硅谷' as corporation, last_name FROM employees;  

4. 显示表结构 

使用 DESCRIBE DESC 命令,表示表结构。
DESCRIBE employees;
DESC employees;

其中,各个字段的含义分别解释如下:
Field :表示字段名称。
Type :表示字段类型,这里 barcode goodsname 是文本型的, price 是整数类型的。
Null :表示该列是否可以存储 NULL 值。
Key :表示该列是否已编制索引。 PRI 表示该列是表主键的一部分; UNI 表示该列是 UNIQUE 索引的一部分;MUL 表示在列中某个给定值允许出现多次。
Default :表示该列是否有默认值,如果有,那么值是多少。
Extra :表示可以获取的与给定列有关的附加信息,例如 AUTO_INCREMENT 等。

5. 过滤数据

背景:

语法:  

SELECT 字段 1, 字段 2
FROM 表名
WHERE 过滤条件  
使用 WHERE 子句,将不满足条件的行过滤掉
WHERE 子句紧随 FROM 子句

举例

SELECT employee_id, last_name, job_id, department_id
FROM employees
WHERE department_id = 90 ;

 

 

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

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

相关文章

【攻城狮计划】Renesas RA2E1 运行 命名

🚩WRITE IN FRONT🚩 🔎介绍:"謓泽"正在路上朝着"攻城狮"方向"前进四"🔎🏅荣誉:2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2022博客之星TOP10…

法大大合同批量下载

1.测试需求 法大大网上80万合同需要下载下来 其实总共1392392页,20885871万条合同数据要下载下来的 2.测试需求分析与验证 2.1调通接口,取到合同列表页信息 遇到的问题: 登录页面有图形验证码,不好处理 解决: 手动登录后用已经有的cookie,如果超时需要重新登录抓取co…

ChatGPT闲谈——火出圈的为什么是 OpenAI?

ChatGPT 走入大众视野之后,AIGC 行业迎来了爆发,尤其是上个月,仿佛每一天都可能是「历史性」的一天。 现在各大网站已经有非常多的优秀创作者进行总结和分析,都是值得一阅的好文。今天本文也分享了关于ChatGPT的看法,有…

顺序表—C语言实现数据结构

本期带大家一起来用C语言代码实现顺序表🌈🌈🌈 文章目录 一、顺序表的概念✅二、顺序表的结构✅三、顺序表的实现(动态顺序表)✅一、🔶定义顺序表结构体🔶二、🔶接口的实现&#x1…

【原理图专题】案例:从集成的电平转换芯片换成三极管分立电平转换怎么就报异常

本案例是一个已经小批量量产的设备,不是我测试出来的,但是也算是我之前一手造成的,因为原理图这部分是我修改的。 异常发现最近生产的整机有部分非接读卡时无法控制到蜂鸣器发声音。我们的设计是这样的,有两个MCU互相通信,一个MCU是控制蜂鸣器的,另一个MCU通过SPI与非接芯…

UEFI Driver Services

为UEFI驱动程序提供的UEFI引导服务和UEFI运行时服务一般可分为三个方面: 驱动通常使用很少使用的服务不应该使用的服务 UEFI驱动程序通常使用的服务 下表列出了UEFI驱动程序通常使用的UEFI服务。接下来,讨论将简要描述每种服务,它们为什么…

scala函数参数

目录 可变参数如果参数列表在存在多个参数,那么可变参数一般放置在最后参数默认值,一般将有默认值的参数放置在参数列表的后面带名参数(一般不使用,除多个参数有默认值且只需给极少个参数赋值的情况) 可变参数 当有不…

无线测温在线监测系统工作原理与产品选型

摘要:本文首先介绍了无线测温在线监测系统的基本工作原理以及软硬件组成,重点介绍了在线监测的无线测温技术特点。在此研究基础上,探讨了无线测温在线监测系统在实际工作场景中的应用案例,证明了其在温度检测方面的重要应用价值。…

浅谈数字化工厂五大核心系统

一、什么是数字化工厂 数字化工厂是将数字技术应用于工厂生产、管理和运营中的一种方式,可以帮助企业提高生产效率和质量,降低成本和风险,提高竞争力和市场份额。数字化工厂是中小制造业企业自主建设制造业信息化的途径。 简道云数字化工厂解…

stm32虚拟串口无法连接,驱动安装,DFU驱动安装

虚拟usb串口设备 插上设备后, COM这里多了一个端口, 但是其用串口调试助手无法打开 在其他设备这里多了一个STM32xx Virtual COM, 更新驱动程序 浏览我的电脑以查找驱动程序让我从计算机上的可用驱动列表中选取端口(COM和LPT)厂商: STMicroelectronics 型号: STMicroelectroni…

倾斜摄影三维模型、激光点云、正射影像、数字高程模型如何实现在线浏览?

四维轻云是成都远石技术团队基于浏览器打造的一款地理空间数据管理云平台,可实现TB级大规模倾斜摄影三维模型发布管理,并支持私有化部署和高阶功能定制化开发。 1、注册登录 首先在四维轻云官网点击「立即试用」按钮,进入登录页面并点击「注…

手写vue(三)模板渲染解析

一、目标 创建一个Vue实例时,我们可以传入el配置项,去指定一个DOM元素作为Vue容器,而这个Vue容器中,可以使用例如插值表达式等Vue框架提供的语法,并且能够渲染到浏览器页面上。 而浏览器并不能解析这些Vue语法&#xf…

Ubuntu20.04软件安装大全

目录 Ubuntu20.04 软件安装大全前言1. Windows和Ubuntu双系统安装1.1 下载Ubuntu系统镜像1.2 磁盘分区1.3 GPT分区安装Ubuntu1.4 系统完成后的一些设置1.5 遇到的一些小bug 2. 换源2.1 apt换源2.2 pip换源 3. 显卡驱动安装3.1 卸载显卡驱动3.2 准备工作3.3 驱动安装3.4 验证 4.…

分享5款小软件,让你打造更舒适的办公电脑

每次发现实用的小工具,都会有种小小的成就感,这也是我喜欢收集和分享高效工具的原因。 图标定制软件——CustomizerGod CustomizerGod是一款强大的电脑图标定制软件,可以让你随心所欲地改变系统中的任何图标。你可以使用CustomizerGod来修改桌面、任务…

Node 01-Buffer

Buffer(缓冲器) 概念 Buffer 是一个类似于数组的 对象 ,用于表示固定长度的字节序列 Buffer 本质是一段内存空间,专门用来处理 二进制数据 。 特点 Buffer 大小固定且无法调整Buffer 性能较好,可以直接对计算机内存…

AI智能课程第一讲:chatgpt介绍

AI应用现状 用AI艺术创作 一个小女孩打折手电筒在侏罗世纪公园找恐龙。 AI用于医疗行业 AI辅助驾驶 AI广告投放上的应用 什么是chatgpt? chatgpt相关技术的发展 为什么用chatgpt写代码会特别的快呢? 因为它集成了GitHub上所有开发者的库公用资源&…

战胜儿童乙肝,早治是关键

在我国实施新生儿乙型肝炎疫苗免疫规划后,母婴传播量明显减少。2014年,中国疾病预防控制中心对全国1-29岁人群乙型肝炎血清流行病学调查结果显示,1-4岁人群HBSAg流行率仅为0.32%,较1992年下降96.7%。然而,仍有6%的新生…

X509证书中的Signature Algorithm

Signature Algorithm在X509中的结构 分别在整个证书结构中Certificate的第二项和 TBSCertificate结构中的第三项: 对于ECC和国密算法 The AlgorithmIdentifier parameters field MUST be absent. 各种签名算法的OID: ECC的: ecdsa-with-SHA256 OBJECT IDENTIFI…

计网第五章.运输层—TCP的三次握手与四次挥手

以下来自湖科大计算机网络公开课笔记及个人所搜集资料 目录 一、TCP三次握手建立连接为什么TCP客户进程最后还要发送一个普通的TCP确认报文段呢?能不能两次握手?总结: 二、TCP四次挥手释放连接四次挥手过程问题1:TCP客户进程在发送…

【推荐】1657- 灵活可扩展,2023年值得尝试的13款富文本编辑器

作为前端开发人员,我们经常需要为网站和应用程序添加文本内容。与传统的文本编辑器不同,富文本编辑器可让您轻松创建各种类型的文本内容,包括加粗字体、斜体字、框架、列表、图片和视频等。 本文我将向大家推荐 13 款开源的灵活可拓展的富文本…