数据库I (SELECT语句)

目录

一、写在前面

1.0 内容概览

1.1 SQL 分类

1.2 SQL语言的规则与规范 

1.2.1 基本规则

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

1.3 注释

1.4 命名规则(暂时了解)

二、基本的SELECT语句 

2.0 SELECT...

2.1 SELECT ... FROM ...

2.2 列的别名

2.3 去除重复行

2.4 空值参与运算

2.5 着重号 ` `

2.6 查询常数

2.7 显示表结构

2.8 过滤数据


(仅是本 fw 看 bilibili 尚硅谷视频做的笔记)

一、写在前面

1.0 内容概览

导图:

 

 1.1 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 等。

因为查询语句使用的非常的频繁,所以很多人把查询语句单拎出来一类:DQL(数据查询语言)。 还有单独将 COMMIT 、 ROLLBACK 取出来称为TCL (Transaction Control Language,事务控制语 言)。

1.2 SQL语言的规则与规范 

1.2.1 基本规则

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

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

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

 1.3 注释

单行注释:#注释文字(MySQL特有的方式)

单行注释:-- 注释文字(--后面必须包含一个空格。)

多行注释:/* 注释文字 */

1.4 命名规则(暂时了解)

  • 数据库、表名不得超过30个字符,变量名限制为29个
  • 必须只能包含 A–Z, a–z, 0–9, _共63个字符
  • 数据库名、表名、字段名等对象名中间不要包含空格
  • 同一个MySQL软件中,数据库不能同名;同一个库中,表不能重名;同一个表中,字段不能重名
  • 必须保证你的字段没有和保留字、数据库系统或常用方法冲突。如果坚持使用,请在SQL语句中使 用`(着重号)引起来
  • 保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性。假如数据 类型在一个表里是整数,那在另一个表里可就别变成字符型了

二、基本的SELECT语句 

2.0 SELECT...

最基本的 SELECT 语句: SELECT 字段1, 字段2, ... FROM 表名

只写 1+1,2*3 会报错,要显示结果起码要写一个 SELECT 语句。

 

 2.1 SELECT ... FROM ...

 其实上面 2.0 相当于从一个伪表 dual 中选择(不需要从哪个表里选择)

 *(星号):表中所有的字段(或列)即“全选”:

 只选几列:

 2.2 列的别名

重命名一个列,便于计算,建议别名简短,见名知意。

注意:支持utf8字符的也能写中文。

三种方法:

  1. 紧跟列名
  2. 列名和别名之间加入关键字AS【as全称:(alias)别名,可省略(即第一种)】
  3. 别名使用双引号(" ")不要使用单引号(' ')

因为mySQL的语法不是很严谨,所以单双引号都能执行,但是在 Oracl 里会出错,而且写错会显得很“业余”,也为了其它数据库的兼容性,所以记住:列里的字符串用单引号,别名用的是双引号。

那么第三种方式跟第一种相比的优点呢:(在一些情况下,双引号去掉没影响)某些情况不能丢掉双引号:别名含空格时。

比如想要得出员工的年工资,用 annual_salary 可以不加双引号,"annual salary"中间为空格,必须加双引号:

 

 也可以第二种第三种结合(补一个as)

 2.3 去除重复行

# 没去重的情况:
SELECT department_id
FROM employees;
# 去重的情况:
SELECT DISTINCT department_id
FROM employees;

没去重是全部的107行,(图略)

去重后看出只有12行:

 再来看两种特殊情况:

# 错误的:(107行*12行 无法对应)
SELECT salary,DISTINCT department_id
FROM employees;

# 仅仅是没有报错,但是没有实际意义
SELECT DISTINCT department_id,salary
FROM employees;

 

 2.4 空值参与运算

  1. 空值:null
  2. null 不等同于0,' ','null'
  3. 空值参与运算:结果一定也为空。

( plus: commission_pcd 是数据库HR列表里的员工提成。)

 实际问题的解决方案:引入IFNULL(单行函数)

 附上代码:

#空值参与运算,结果一定也为空
SELECT employee_id,salary "月工资",salary*(1 + commission_pct)*12 "年工资",commission_pct
FROM employees;

#实际问题的解决方案:引入IFNULL
SELECT employee_id,salary "月工资",salary*(1 + IFNULL (commission_pct,0))*12 "年工资",commission_pct
FROM employees;

2.5 着重号 ` `

`  为键盘上部数字123..区域的数字1的左边的符号。

我们需要保证表中的字段、表名等没有和保留字、数据库系统或常用方法冲突。如果真的相同,请在 SQL语句中使用一对``(着重号)引起来。

 

 

 

 发现对普通字段(列名)和表名用着重号也没有问题,(但看着可读性还变差了)一般情况下不加。

2.6 查询常数

“常数字段” 会进行满填充。

你可能会问为什么我们还要对常数进行查询呢?

SQL 中的 SELECT 语法的确提供了这个功能,一般来说我们只从一个表中查询数据,通常不需要增加一个 固定的常数列,但如果我们想整合不同的数据源,用常数列作为这个表的标记,就需要查询常数。

2.7 显示表结构

关键字:DESCRIBE 或 DESC

看看表中有哪些字段,分别是什么类型的,有没有什么约束。

 2.8 过滤数据

关键字:WHERE(声明在FROM后面,与FROM之间不能插入其它关键字)

#查询90号部门员工的信息:
SELECT * FROM employees
WHERE department_id = 90;

#查询last_name为'King'的员工信息:
SELECT * FROM employees
WHERE LAST_NAME = 'king';

注意:mySQL不区分大小写!但是Oracl 对字符串区分!

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

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

相关文章

HTML5 Web Workers

HTML5 Web Workers web worker 是运行在后台的 JavaScript,不会影响页面的性能,更好的解释是,你可以使用web worker提供的一种简单的方法来为web内容在后台线程中运行脚本,这些线程在执行任务的过程中并不会干扰用户界面&#xff…

Java反射复习

Java反射复习1.动态代理2.创建动态代理3.反射4.获取Class对象5. 反射获取构造方法6. 获取成员变量7. 获取成员变量并获取值和修改值8.获取成员方法9. 获取成员方法并运行10. 面试题:11. 练习泛型擦除12 练习:修改字符串的内容13 练习,反射和配…

【新2023Q2模拟题JAVA】华为OD机试 - 寻找密码

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:寻找密码 题目 小王在进行游…

Nginx 负载均衡及其高可用

优质博文:IT-BLOG-CN 负载均衡(Load Balance): 意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其他任务服务器等,从而共同完成工作任务。负载均衡建立在现有的网络…

面试官问 : SimpleDateFormat 不是线程安全的,你有了解过吗?

前言 金三银四又有战况: 我们的看官,不能白白牺牲! 现在,立刻,马上,跟我开始复现 ! 开始看我源码分析! 开始了解怎么解决! 正文 复现代码 多线程操作使用SimpleDateForma…

ChatGPT的平替来了?一文总结 ChatGPT 的开源平替,你值得拥有

文章目录【AIGC精选】总结 ChatGPT 的开源平替,你值得拥有1.斯坦福发布 Alpaca 7B,性能匹敌 GPT-3.52.弥补斯坦福 Alpaca 中文短板,中文大模型 BELLE 开源3.国产AI大模型 ChatGLM-6B 开启内测4.中文 Alpaca 模型 Luotuo 开源5. ChatGPT 最强竞…

计算机网络第一章(概述)【湖科大教书匠】

1. 各种网络 网络(Network)由若干**结点(Node)和连接这些结点的链路(Link)**组成多个网络还可以通过路由器互连起来,这样就构成了一个覆盖范围更大的网络,即互联网(互连网)。因此,互联网是"网络的网络(Network of Networks)"**因特…

Mybatis的二级缓存

缓存的概述和分类 概述 缓存就是一块内存空间.保存临时数据 为什么使用缓存 将数据源(数据库或者文件)中的数据读取出来存放到缓存中,再次获取的时候 ,直接从缓存中获取,可以减少和数据库交互的次数,这样可以提升程序的性能! 缓存的适用情况 …

38-二叉树练习-LeetCode145二叉树的后序遍历

题目 给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[3,2,1] 示例 2: 输入:root [] 输出:[] 示例 3: 输入:ro…

让chatGPT当我的老师如何? 通过和chatGPT交互式学习,了解在ES中,一条JSON数据是如何写到磁盘上的

最近一直有一个问题,如鲠在喉。争取早一天解决,早一天踏踏实实的睡觉。 问题是:在ES中,一条JSON数据是如何写入到磁盘上的? 如何解决这个问题?我想到了chatGPT,还有lucene的学习资料。这篇文章&…

【机器学习】决策树(理论)

决策树(理论) 目录一、何为决策树1、决策树的组成2、决策树的构建二、熵1、熵的作用2、熵的定义3、熵的计算4、条件熵的引入5、条件熵的计算三、划分选择1、信息增益( ID3 算法选用的评估标准)2、信息增益率( C4.5 算法…

DetectGPT:使用概率曲率的零样本机器生成文本检测

DetectGPT的目的是确定一段文本是否由特定的llm生成,例如GPT-3。为了对段落 x 进行分类,DetectGPT 首先使用通用的预训练模型(例如 T5)对段落 ~xi 生成较小的扰动。然后DetectGPT将原始样本x的对数概率与每个扰动样本~xi进行比较。…

Springboot 多线程分批切割处理 大数据量List集合 ,实用示例

前言 哲学提问镇贴: 不了解异步怎么使用的看官, 可阅: SpringBoot 最简单的使用异步线程案例 Async_小目标青年的博客-CSDN博客 Springboot Async异步扩展使用 结合 CompletableFuture_小目标青年的博客-CSDN博客 想了解更多关于批量list处…

25- 卷积神经网络(CNN)原理 (TensorFlow系列) (深度学习)

知识要点 卷积神经网络的几个主要结构: 卷积层(Convolutions): Valid :不填充,也就是最终大小为卷积后的大小. Same:输出大小与原图大小一致,那么N ​变成了​N2P. padding-零填充. 池化层(Subsampli…

《程序员面试金典(第6版)》面试题 08.08. 有重复字符串的排列组合(回溯算法,全排列问题)C++

题目描述 有重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合。 示例1: 输入:S “qqe” 输出:[“eqq”,“qeq”,“qqe”] 示例2: 输入:S “ab” 输出:[“ab”, “ba”] 提示: 字符都是英文字母。…

Mybatis持久层框架 | Lombok搭建

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Lombok Lombok项目是一个java库,它可以自动插入到编辑器和构建工具中,增强java的性能。不需要再写getter、setter或equals方法,只要…

自然语言大模型介绍

1 简介 最近一直被大语言模型刷屏。本文是周末技术分享会的提纲,总结了一些自然语言模型相关的重要技术,以及各个主流公司的研究方向和进展,和大家共同学习。 2 Transformer 目前的大模型基本都是Transformer及其变种。本部分将介绍Transf…

【WEB前端进阶之路】 HTML 全路线学习知识点梳理(上)

前言 HTML 是一切Web开发的基础,本文专门为小白整理,针对前端零基础的朋友们,手把手教你学习HTML,让你轻松迈入WEB开发的行列。 首先,感谢 橙子_ 在HTML学习以及本文编写过程中对我的帮助。 文章目录前言一.HTML简介1.…

【NLP经典论文阅读】Efficient Estimation of Word Representations in Vector Space(附代码)

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

二值mask转polygon/RLE (coco segment格式)

coco数据集annotation的segmentation并不是二值mask,而是polygon格式, 看一个annotation. {"segmentation": [[510.66,423.01,511.72,420.03,510.45......]], #两两组成(x,y)坐标,polygon格式"area": 702.1057499999998…
最新文章