SQL 入门课程

179 阅读9分钟

SQL 入门课程

我正在参加「掘金·启航计划」

基本概念

数据库简介

什么是数据库?

数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、查询、更新、删除等操作。

所谓“数据库”是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。

数据库由存储相关信息的表组成。

数据库表

数据库表以结构化的格式存储和显示数据,由行和列组成,与 Excel 电子表格中显示的类似。

一个数据库通常包含一个或多个表,每个表都为特定目的而设计。

例如,创建一个名称和电话号码的数据库表。

首先,我们将使用 FirstName,LastName 和 Telephone 的名称来设置列。

image-20221008202634692.png

注: 表具有指定数量的列,但可以包含任意数量的行。

主键(PRIMARY KEY)

主键(PRIMARY KEY)是表中唯一标识表记录的字段。

主键的主要特征是:

  • 主键必须包含唯一的值。
  • 主键列不能包含 NULL 值。

例如,在上表中,唯一的 ID 号将是表中主键的最佳选择,在名字重复的时候可以通过ID来唯一识别, 就像身份证号码一样。

注: 每张表格只能有一个主键, 每行主键的值必须不同。

什么是 SQL?

SQL,指结构化查询语言,全称是 Structured Query Language。

SQL 是用于访问和处理数据库的标准的计算机语言。

MySQL是一个关系型数据库管理系统,MySQL可以使用SQL语言来访问数据库。

SQL 可以:

  • 创建新的数据库、表、存储过程和视图。
  • 在数据库中插入、更新、删除记录。
  • 从数据库中检索数据等。

虽然 SQL 是一门 ANSI(美国国家标准化组织)标准的计算机语言,但是仍然存在着多种不同版本的 SQL 语言。

除了SQL标准之外,大多数SQL数据库程序都有自己的专有扩展,但它们都支持主要命令。

  • SQL 允许同时运行多个查询或命令。 image-20220929142527485.png
    • 选择多列

image-20220929142758964.png

  • SQL 不区分大小写。

    • 通常的做法是用大写编写所有 SQL 命令。 image-20220929142458901.png
  • 一个 SQL 语句可以放在一个或多个文本行上。另外,多个 SQL 语句可以组合在一个文本行上。

    在 SQL 中,会忽略空格和换行。

    • 建议避免不必要的空格和空行。结合适当的间距和缩进,将命令分解为逻辑行,这将使你的 SQL 语句更易于阅读和维护。

image-20220929142419631.png

一些最重要的 SQL 命令


  • SELECT - 从数据库中提取数据
  • UPDATE - 更新数据库中的数据
  • DELETE - 从数据库中删除数据
  • INSERT INTO - 向数据库中插入新数据
  • CREATE DATABASE - 创建新数据库
  • ALTER DATABASE - 修改数据库
  • CREATE TABLE - 创建新表
  • ALTER TABLE - 变更(改变)数据库表
  • DROP TABLE - 删除表
  • CREATE INDEX - 创建索引(搜索键)
  • DROP INDEX - 删除索引
SELECT语句

 句法:

SELECT column_name(s) FROM table_name
SELECT语句和WHERE子句

 句法:

SELECT [*] FROM [TableName] WHERE [condition1]
SELECT语句与WHERE和/或子句

 句法:

SELECT [*] FROM [TableName] WHERE [condition1] [AND [OR]] [condition2]...
SELECT语句与ORDER BY

 句法:

SELECT column_name()
FROM table_name
ORDER BY column_name() ASC or DESC
SELECT DISTINCT(区分)子句

 句法:

SELECT DISTINCT column1, column2....columnN
FROM   table_name;
SELECT IN子句

 句法:

SELECT column1, column2....columnN
FROM   table_name
WHERE  column_name IN (val-1, val-2,...val-N);
SELECT LIKE (类)子句

 句法:

SELECT column1, column2....columnN
FROM   table_name
WHERE  column_name LIKE { PATTERN };
SELECT COUNT(计数)子句

 句法:

SELECT COUNT(column_name)
FROM   table_name
WHERE  CONDITION;
SELECT与HAVING子句

 句法:

SELECT SUM(column_name)
FROM   table_name
WHERE  CONDITION
GROUP BY column_name
HAVING (arithematic function condition);
INSERT INTO语句

 句法:

INSERT INTO table_name (column, column1, column2, column3, ...)
VALUES (value, value1, value2, value3 ...)
UPDATE语句

 句法:

UPDATE table_name
SET column=value, column1=value1,...
WHERE someColumn=someValue
DELETE语句

 句法:

DELETE FROM tableName
WHERE someColumn = someValue
CREATE 语句

 句法:

CREATE TABLE table_name(
column1 datatype,
column2 datatype,
column3 datatype,
.....
columnN datatype,
PRIMARY KEY( one or more columns )
);
DROP 语句

 句法:

DROP TABLE table_name;
CREATE INDEX语句

 句法:

CREATE UNIQUE INDEX index_name
ON table_name ( column1, column2,...columnN);
DROP INDEX语句

 句法:

ALTER TABLE table_name
DROP INDEX index_name;
DESC语句

 句法:

DESC table_name;
TRUNCATE 截断表语句

 句法:

TRUNCATE TABLE table_name;
ALTER TABLE语句

 句法:

ALTER TABLE table_name {ADD|DROP|MODIFY} column_name {data_ype};
ALTER TABLE语句(对表名重命名)

 句法:

ALTER TABLE table_name RENAME TO new_table_name;
Use语句

 句法:

USE database_name;
COMMIT语句

 句法:

COMMIT;
ROLLBACK语句

 句法:

ROLLBACK;

SQL语法速查

SQL 语句语法
AND / ORSELECT column_name(s)
FROM table_name
WHERE condition
AND|OR condition
ALTER TABLEALTER TABLE table_name
ADD column_name datatype
or
ALTER TABLE table_name
DROP COLUMN column_name
AS (alias)SELECT column_name AS column_alias
FROM table_name
or
SELECT column_name
FROM table_name AS table_alias
BETWEENSELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2
CREATE DATABASECREATE DATABASE database_name
CREATE TABLECREATE TABLE table_name
(
column_name1 data_type,
column_name2 data_type,
column_name2 data_type,
...
)
CREATE INDEXCREATE INDEX index_name
ON table_name (column_name)
or
CREATE UNIQUE INDEX index_name
ON table_name (column_name)
CREATE VIEWCREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
DELETEDELETE FROM table_name
WHERE some_column=some_value
or
DELETE FROM table_name
(Note: Deletes the entire table!!)
DELETE * FROM table_name
(Note: Deletes the entire table!!)
DROP DATABASEDROP DATABASE database_name
DROP INDEXDROP INDEX table_name.index_name (SQL Server)
DROP INDEX index_name ON table_name (MS Access)
DROP INDEX index_name (DB2/Oracle)
ALTER TABLE table_name
DROP INDEX index_name (MySQL)
DROP TABLEDROP TABLE table_name
GROUP BYSELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVINGSELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value
INSELECT column_name(s)
FROM table_name
WHERE column_name
IN (value1,value2,..)
INSERT INTOINSERT INTO table_name
VALUES (value1, value2, value3,....)
or
INSERT INTO table_name
(column1, column2, column3,...)
VALUES (value1, value2, value3,....)
INNER JOINSELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name
LEFT JOINSELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
RIGHT JOINSELECT column_name(s)
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
FULL JOINSELECT column_name(s)
FROM table_name1
FULL JOIN table_name2
ON table_name1.column_name=table_name2.column_name
LIKESELECT column_name(s)
FROM table_name
WHERE column_nameLIKE pattern
ORDER BYSELECT column_name(s)
FROM table_name
ORDER BY column_name [ASC|DESC]
SELECTSELECT column_name(s)
FROM table_name
SELECT *SELECT *
FROM table_name
SELECT DISTINCTSELECT DISTINCT column_name(s)
FROM table_name
SELECT INTOSELECT *
INTO new_table_name [IN externaldatabase]
FROM old_table_name
or
SELECT column_name(s)
INTO new_table_name [IN externaldatabase]
FROM old_table_name
SELECT TOPSELECT TOP number|percent column_name(s)
FROM table_name
TRUNCATE TABLETRUNCATE TABLE table_name
UNIONSELECT column_name(s)
FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
UNION ALLSELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2
UPDATEUPDATE table_name
SET column1=value, column2=value,...
WHERE some_column=some_value
WHERESELECT column_name(s)
FROM table_name
WHERE column_name operator value

SQL 运算符


运算符是保留字或主要用于 SQL 语句的 WHERE 子句中的字符,用于执行操作,例如:比较和算术运算。 这些运算符用于指定 SQL 语句中的条件,并用作语句中多个条件的连词。

常见运算符有以下几种:

  • 算术运算符
  • 比较运算符
  • 逻辑运算符
  • 否定条件运算符
SQL 算术运算符

假设变量 a 的值是:10,变量 b 的值是:20,以下为各运算符执行结果:

运算符描述例子
+加法,执行加法运算。a + b 得到 30
-减法,执行减法运算。a - b 得到 -10
*乘法,执行乘法运算。a * b 得到 200
/用左操作数除以右操作数。b / a 得到 2
%用左操作数除以右操作数并返回余数。b % a 得到 0
SQL 比较运算符

假设变量 a 的值是:10,变量 b 的值是:20,以下为各运算符执行结果:

运算符描述例子
=检查两个操作数的值是否相等,如果是,则条件为真(true)。(a = b) is false.
!=检查两个操作数的值是否相等,如果值不相等则条件为真(true)。(a != b) is true.
<>检查两个操作数的值是否相等,如果值不相等则条件为真(true)。(a <> b) is true.
检查左操作数的值是否大于右操作数的值,如果是,则条件为真(true)。(a > b) is false.
<检查左操作数的值是否小于右操作数的值,如果是,则条件为真(true)。(a < b) is true.
>=检查左操作数的值是否大于或等于右操作数的值,如果是,则条件为真(true)。(a >= b) is false
<=检查左操作数的值是否小于或等于右操作数的值,如果是,则条件为真(true)。(a <= b) is true.
!<检查左操作数的值是否不小于右操作数的值,如果是,则条件变为真(true)。(a !< b) is false.
!>检查左操作数的值是否不大于右操作数的值,如果是,则条件变为真(true)。(a !> b) is true.
SQL 逻辑运算符:

这是在 SQL 所有的逻辑运算符的列表。

运算符描述
ALLALL运算符用于将值与另一个值集中的所有值进行比较。
ANDAND运算符允许在SQL语句的WHERE子句中指定多个条件。
ANYANY运算符用于根据条件将值与列表中的任何适用值进行比较。
BETWEENBETWEEN运算符用于搜索在给定最小值和最大值内的值。
EXISTSEXISTS运算符用于搜索指定表中是否存在满足特定条件的行。
ININ运算符用于将值与已指定的文字值列表进行比较。
LIKELIKE运算符用于使用通配符运算符将值与类似值进行比较。
NOTNOT运算符反转使用它的逻辑运算符的含义。 例如:NOT EXISTS, NOT BETWEEN, NOT IN等等,这是一个否定运算符。
OROR运算符用于组合SQL语句的WHERE子句中的多个条件。
IS NULLIS NULL运算符用于将值与NULL值进行比较。
UNIQUEUNIQUE运算符搜索指定表的每一行的唯一性(无重复项)。

SQL 表达式


 表达式是计算值的一个或多个值、运算符和SQL函数的组合。这些SQL表达式类似于公式,它们是用查询语言编写的。

 您还可以使用它们查询数据库中的特定数据集。

句法

 考虑SELECT语句的基本语法,如下所示:

SELECT column1, column2, columnN 
FROM table_name 
WHERE [CONDITION|EXPRESSION];

 有不同类型的sql表达式,如下所示:

  • 布尔型
  • 数值型
  • 日期

 现在让我们详细讨论每一个问题。

布尔表达式

 SQL布尔表达式基于匹配单个值获取数据。

 句法:

SELECT column1, column2, columnN 
FROM table_name 
WHERE SINGLE VALUE MATCHING EXPRESSION;

 使用具有以下记录的Customers表:

SQL> SELECT * FROM CUSTOMERS;
+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+
7 rows in set (0.00 sec)

 下表是一个简单的示例,展示了各种sql布尔表达式的用法。

SQL> SELECT * FROM CUSTOMERS WHERE SALARY = 10000;
+----+-------+-----+---------+----------+
| ID | NAME  | AGE | ADDRESS | SALARY   |
+----+-------+-----+---------+----------+
|  7 | Muffy |  24 | Indore  | 10000.00 |
+----+-------+-----+---------+----------+
1 row in set (0.00 sec)
数值表达式

 数值表达式用于在任何查询中执行任何数学运算。

 句法:

SELECT numerical_expression as  OPERATION_NAME
[FROM table_name
WHERE CONDITION] ;

 这里,数值表达式用于数学表达式或任何公式。下面是一个简单的示例,展示了SQLNDigitic表达式的用法:

SQL> SELECT (15 + 6) AS ADDITION
+----------+
| ADDITION |
+----------+
|       21 |
+----------+
1 row in set (0.00 sec)

 有几个内置函数,如avg()、sum()、count()等,用于对表或特定表列执行所谓的聚合数据计算。

SQL> SELECT COUNT(*) AS "RECORDS" FROM CUSTOMERS; 
+---------+
| RECORDS |
+---------+
|       7 |
+---------+
1 row in set (0.00 sec)
日期表达式

 日期表达式返回当前系统日期和时间值:

SQL>  SELECT CURRENT_TIMESTAMP;
+---------------------+
| Current_Timestamp   |
+---------------------+
| 2009-11-12 06:40:23 |
+---------------------+
1 row in set (0.00 sec)

 另一个日期表达式如下所示:

SQL>  SELECT  GETDATE();;
+-------------------------+
| GETDATE                 |
+-------------------------+
| 2009-10-22 12:07:18.140 |
+-------------------------+
1 row in set (0.00 sec)

总结

我们已经学习了如何使用 SQL 在数据库中执行查询、获取数据、插入新的记录、删除记录以及更新记录。

我们已经学习了如何通过 SQL 创建数据库、表、索引,以及如何撤销它们。

当然本篇文章内容都是精简所化,仅供参考!

最后我们一起来做个小测验吧!

1.SQL 指的是?

  • A.Strong Question Language

  • B.Structured Question Language

  • C.Structured Query Language