SQL入门:从零掌握数据库查询语言

1、SQL概述

1.1 SQL背景知识

SQL(Structured Query Language,结构化查询语言) 是一种专门用于管理和操作关系型数据库的标准编程语言。它允许用户执行各种数据库操作,包括数据查询、插入、更新、删除等。

  • 无论是前端工程师还是后端算法工程师,都必不可免要和数据打交道,都需要了解如何又快又准的获取想要的数据,相较于其他语言而言,SQL语言的半衰期非常长。
  • SQL由IBM在上世纪70年代左右开发出来,后由美国国家标准局开始着手制定SQL标准,先后出现SQL-86、SQL-89、SQL-92、SQL-99等标准。
  • 不同数据库生产商都支持SQL语句,但都有其特有的内容。

1.2 SQL分类

SQL语言在功能上主要分为以下三个大类:

  1. DDL(数据定义语言) ,这些语句定义了不同的数据库、表、视图、索引等数据库对象,还可以用来创建、删除、修改数据库和数据表的结构。主要的语句关键字包括 CREATE、ALTER、DROP、RENAME等。
  2. DML(数据操作语言) ,用于添加、删除、更新和查询数据库记录,并检查数据的完整性。主要的语句关键字包括 INSERT、DELETE、UPDATE、SELECT等。
  3. DCL(数据控制语言) ,用于定义数据库、表、字段、用户的访问权限和安全级别。主要的语句关键字包括 GRANT、REVOKE、COMMIT、ROLLBACK、SAVEPOINT等。

2、SQL语言的规则和规范

2.1 基本规则

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

2.2 SQL大小写规范

  • MySQL 在 Windows 环境下大小写不敏感;
  • MySQL 在 Linux 环境下大小写敏感:数据库名、表名、表的别名、变量名是严格区分大小写的;关键字、函数名、列名(或字段名)、列的别名(字段的别名)忽略大小写。

2.3 注释

采用如下的格式方法进行注释操作:

sql 复制代码
单行注释 :# 注释文字(MySQL特有方式)
单行注释 :-- 注释文字(--后面必须加一个空格)
多行注释 :/* 注释文字 */

2.4 数据导入指令

在命令行客户端登录 mysql ,使用 source指令导入:

sql 复制代码
mysql> source d:\mysqldb.sql

导入新数据前:

导入后:

可以正常使用该数据库:

3、基本的 SELECT 语句

3.0 SELECT ...


语法:SELECT 1,2; # 没有其他子句


3.1 SELECT ... FROM


语法:SELECT 字段1,字段2 FROM 表

当选择字段用通配符 ' * ' 替换时,就会输出表中所有字段信息。


3.2 列的别名

列的别名顾名思义就是起一个"小名",重命名它。有三种方式可以实现:

(1)列名与别名中间加一个空格;

(2)列名与别名之间加一个关键字 AS (可省略);

(3)别名紧跟列名,但是别名使用双引号,这样的别名可以在其中包含空格或特殊字符

3.3 去除重复行

  • 默认情况下,查询会返回全部行,包括重复行

示例:查找员工表中有哪些部门 id;

使用DISTINCT 关键字可以剔除重复行:

3.4 空值参与运算

  • 所有运算符或列值遇到 null 值,运算的结果都是 null;
  • 在 MySQL 中,空值不等价于空字符串。空值的长度是空,空字符串的长度是0;
  • 在 MySQL 中,空值占用空间。

3.5 着重号

如果表名已经命名为了关键字、保留字等,查询时会出现错误,此时使用着重号( ` `)标记一下表名即可正常使用。

在第四行中,order 的颜色明显和关键字一样,会出现错误。

3.6 查询常数

  • 这里的常数不是单指阿拉伯数字,而是指的是常数列。
  • SELECT 'CSDN' AS '公司' ,last_name FROM employees;
  • 这样会给每一个查询结果都匹配上一个常数。

4、显示表结构

  • 使用 DESCRIBE 或 DESC 命令,表示表的结构;

5、过滤数据

  • 使用 WHERE 子句,将不满足条件的行都过滤;
  • WHERE 子句必须紧跟 FROM 子句
相关推荐
悦悦欧呐呐呐呐1 小时前
Redis 缓存中,穿透、击穿、雪崩的区别是什么?如何避免?
数据库·redis·缓存
@游子1 小时前
第二章-MySQL之手工注入(二)
数据库·mysql
心无旁骛~1 小时前
openGauss 在 AI、RAG 与向量数据库时代的技术破局与生态深耕
数据库·人工智能
6***94151 小时前
MySQL 字符串日期格式转换
android·数据库·mysql
p***q781 小时前
MySQL——用户管理
android·mysql·adb
g***86691 小时前
MySQL - Navicat自动备份MySQL数据
android·数据库·mysql
youxiao_902 小时前
数据库基础与安装
数据库
q***01772 小时前
【MySQL】数据类型
android·数据库·mysql
SelectDB2 小时前
Apache Doris 在小米统一 OLAP 和湖仓一体的实践
运维·数据库·程序员