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 子句
相关推荐
谷哥的小弟几秒前
SQLite MCP服务器安装以及客户端连接配置
服务器·数据库·人工智能·sqlite·大模型·源码·mcp
1.14(java)15 分钟前
掌握数据库约束:确保数据精准可靠
java·数据库·mysql·数据库约束
Codeking__19 分钟前
Redis——value的数据类型与单线程工作模型
java·数据库·redis
rchmin20 分钟前
MySQL主从复制原理详解
数据库·mysql
wxr061621 分钟前
部署Spring Boot项目+mysql并允许前端本地访问
前端·spring boot·mysql·持续部署
摩西蒙26 分钟前
阿里云 MaxCompute(原 ODPS)定时任务查询库存快照场景
java·大数据·sql·database
液态不合群40 分钟前
Java中线程安全问题的原因和解决方案
java·数据库
鲨莎分不晴41 分钟前
给 Hadoop 插上 SQL 的翅膀:Apache Hive 架构与实战全解
hadoop·sql·apache
程序员柒叔42 分钟前
Dify 集成-数据库与缓存
数据库·缓存·dify