August 17, 2022
SQL 简介 # SQL (Structured Query Language:结构化查询语言) 是用于管理关系数据库管理系统(RDBMS)。 SQL 的范围包括数据插入、查询、更新和删除,数据库模式创建和修改,以及数据访问控制。
SQL 是什么? # SQL 指结构化查询语言,全称是 Structured Query Language。 SQL 让您可以访问和处理数据库,包括数据插入、查询、更新和删除。 SQL 在1986年成为 ANSI(American National Standards Institute 美国国家标准化组织)的一项标准,在 1987 年成为国际标准化组织(ISO)标准。 SQL 能做什么? # SQL 面向数据库执行查询 SQL 可从数据库取回数据 QL 可在数据库中插入新的记录 QL 可更新数据库中的数据 QL 可从数据库删除记录 QL 可创建新数据库 QL 可在数据库中创建新表 QL 可在数据库中创建存储过程 QL 可在数据库中创建视图 QL 可以设置表、存储过程和视图的权限 SQL 是一种标准 - 但是… # 虽然 SQL 是一门 ANSI(American National Standards Institute 美国国家标准化组织)标准的计算机语言,但是仍然存在着多种不同版本的 SQL 语言。
然而,为了与 ANSI 标准相兼容,它们必须以相似的方式共同地来支持一些主要的命令(比如 SELECT、UPDATE、DELETE、INSERT、WHERE 等等)。
...
August 18, 2022
SQL SELECT TOP 子句 # SELECT TOP 子句用于规定要返回的记录的数目。
SELECT TOP 子句对于拥有数千条记录的大型表来说,是非常有用的。
注意:并非所有的数据库系统都支持 SELECT TOP 语句。 MySQL 支持 LIMIT 语句来选取指定的条数数据, Oracle 可以使用 ROWNUM 来选取。
SQL Server / MS Access 语法 # SELECT TOP number|percent column_name(s) FROM table_name; MySQL 语法 # SELECT column_name(s) FROM table_name LIMIT number; 实例
SELECT * FROM Persons LIMIT 5; Oracle 语法 # SELECT column_name(s) FROM table_name WHERE ROWNUM <= number; 实例
SELECT * FROM Persons WHERE ROWNUM <=5; MySQL SELECT LIMIT 实例 # MariaDB [learnsql]> select * from domains limit 5; +----+----------+------------+------------+------------+ | ID | ICP | DomainName | RegDate | EndDate | +----+----------+------------+------------+------------+ | 4 | namesilo | getos.
...
August 18, 2022
SQL LIKE 操作符 # LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。
SQL LIKE 语法 # SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern; SQL LIKE 操作符实例 # 下面的 SQL 语句选取 domainname 以字母 “p” 开始的所有记录:
MariaDB [learnsql]> select * from domains where domainname like 'p%'; +----+-----------+------------+------------+------------+ | ID | ICP | DomainName | RegDate | EndDate | +----+-----------+------------+------------+------------+ | 14 | namesilo | pornie.in | 2016/3/10 | 2023/3/10 | | 25 | namesilo | pornie.
...
August 20, 2022
SQL 通配符 # 通配符可用于替代字符串中的任何其他字符。
在 SQL 中,通配符与 SQL LIKE 操作符一起使用。
SQL 通配符用于搜索表中的数据。
在 SQL 中,可使用以下通配符:
|通配符 | 描述 | # | % | 替代 0 个或多个字符 | | _ | 替代一个字符 | | [charlist] | 字符列中的任何单一字符 | | [^charlist]或[!charlist] | 不在字符列中的任何单一字符 |
使用 SQL % 通配符 # 下面的 SQL 语句选取 domainname 以字母 “a” 开始的所有网站:
MariaDB [learnsql]> select * from domains where domainname like 'a%'; +----+-----------+------------+------------+------------+ | ID | ICP | DomainName | RegDate | EndDate | +----+-----------+------------+------------+------------+ | 15 | namesilo | aosp.
...
August 20, 2022
SQL IN 操作符 # IN 操作符 # IN 操作符允许您在 WHERE 子句中规定多个值。
SQL IN 语法 # SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...); IN 操作符实例 # 下面的 SQL 语句选取 icp 为 “google” 或 “dnspod.cn” 的所有网站:
MariaDB [learnsql]> select * from domains where icp in ('google','dnspod.cn'); +----+-----------+--------------+------------+------------+ | ID | ICP | DomainName | RegDate | EndDate | +----+-----------+--------------+------------+------------+ | 22 | google | suopo.net | 2020/6/17 | 2023/6/17 | | 43 | dnspod.
...
August 20, 2022
SQL BETWEEN 操作符 # BETWEEN 操作符用于选取介于两个值之间的数据范围内的值。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
SQL BETWEEN 语法 # SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2; BETWEEN 操作符实例 # 下面的 SQL 语句选取 id 介于 10 和 20 之间的所有记录:
MariaDB [learnsql]> select * from domains where id between 10 and 20; +----+----------+---------------+-----------+-----------+ | ID | ICP | DomainName | RegDate | EndDate | +----+----------+---------------+-----------+-----------+ | 12 | namesilo | blbl.dev | 2020/1/17 | 2023/1/17 | | 13 | namesilo | raspi.
...
August 21, 2022
SQL 别名 # 通过使用 SQL,可以为表名称或列名称指定别名。
基本上,创建别名是为了让列名称的可读性更强。
列的 SQL 别名语法 # SELECT column_name AS alias_name FROM table_name; 表的 SQL 别名语法 # SELECT column_name(s) FROM table_name AS alias_name; 列的别名实例 # 下面的 SQL 语句指定了两个别名,一个是 domainname 列的别名,一个是 icp 列的别名。提示:如果列名称包含空格,要求使用双引号或方括号:
MariaDB [learnsql]> select domainname as n, icp as i from domains; +---------------+-----------+ | n | i | +---------------+-----------+ | getos.org | namesilo | | dotbbq.com | wanwang | | lyq.wiki | wanwang | | les.
...
August 21, 2022
SQL JOIN # SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。
最常见的 JOIN 类型:SQL INNER JOIN(简单的 JOIN)。 SQL INNER JOIN 从多个表中返回满足 JOIN 条件的所有行。
JOIN演示 # sqlite> select domains.id,domains.domainname,logs.google,logs.baidu from domains inner join logs on domains.id=logs.id; ID DomainName google baidu -- ---------------- ------ ----- 1 aisoc.cn 1003 2075 2 ado.ink 1770 1660 3 nrdoc.com 1496 2621 4 getos.org 1864 2745 5 litiaotiao.cn 1574 2295 6 dotbbq.com 2927 2448 7 lyq.wiki 2543 395 8 les.moe 1166 350 9 regex.
...
August 28, 2022
SQL INNER JOIN 关键字 # INNER JOIN 关键字在表中存在至少一个匹配时返回行。
SQL INNER JOIN 语法 # SELECT column_name(s) FROM table1 INNER JOIN table2 ON table1.column_name=table2.column_name; 或:
SELECT column_name(s) FROM table1 JOIN table2 ON table1.column_name=table2.column_name; 注释:INNER JOIN 与 JOIN 是相同的。
SQL INNER JOIN 实例 # MariaDB [learnsql]> select domains.id,domains.domainname,logs.baidu,logs.google from domains inner join logs on domains.id=logs.id order by logs.google; +----+---------------+--------+--------+ | id | domainname | baidu | google | +----+---------------+--------+--------+ | 47 | manjushri.
...
August 28, 2022
SQL LEFT JOIN 关键字 # LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。
SQL LEFT JOIN 语法 # SELECT column_name(s) FROM table1 LEFT JOIN table2 ON table1.column_name=table2.column_name; 或:
SELECT column_name(s) FROM table1 LEFT OUTER JOIN table2 ON table1.column_name=table2.column_name; 注释:在某些数据库中,LEFT JOIN 称为 LEFT OUTER JOIN。
SQL LEFT JOIN 实例 # 下面的 SQL 语句将返回所有网站及他们的访问量(如果有的话)。
以下实例中我们把 domains 作为左表,logs 作为右表:
MariaDB [learnsql]> select domains.domainname,logs.google from domains left join logs on domains.id=logs.id; +---------------+--------+ | domainname | google | +---------------+--------+ | getos.
...