SQL是用于访问和处理数据库的标准的计算机语言,让您可以访问和处理数据库。
SQL能做什么?
SQL面向数据库执行查询
SQL 可从数据库取回数据
SQL 可在数据库中插入新的记录
SQL 可更新数据库中的数据
SQL 可从数据库删除记录
SQL 可创建新数据库
SQL 可在数据库中创建新表
SQL 可在数据库中创建存储过程
SQL 可在数据库中创建视图
SQL 可以设置表、存储过程和视图的权限
SQL语句
数据库表
一个数据库通常包含一个或多个表。每个表有一个名字标识(例如:"Websites"),表包含带有数据的记录(行)。
我们可以通过SQL命令对数据表进行相应的操作。
一些重用重要的SQL命令:
SELECT - 从数据库中提取数据
UPDATE - 更新数据库中的数据
DELETE - 从数据库中删除数据
INSERT INTO - 向数据库中插入新数据
CREATE DATABASE - 创建新数据库
ALTER DATABASE - 修改数据库
CREATE TABLE - 创建新表
ALTER TABLE - 变更(改变)数据库表
DROP TABLE - 删除表
CREATE INDEX - 创建索引(搜索键)
DROP INDEX - 删除索引
特别地:SQL 对大小写不敏感:SELECT 与 select 是相同的。
写 INSERT INTO
语法:
INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);
演示:
向 "Websites" 表中插入一个新行。
INSERT INTO Websites (name, url, alexa, country) VALUES ('百度','https://www.baidu.com/','4','CN');
结果:
改 UPDATE
语法:
UPDATE table_name SET column1=value1,column2=value2,... WHERE some_column=some_value;
特别地:WHERE 子句规定哪条记录或者哪些记录需要更新。如果您省略了 WHERE 子句,所有的记录都将被更新!
演示:
把 "菜鸟教程" 的 alexa 排名更新为 5000,country 改为 USA。
UPDATE Websites SET alexa='5000', country='USA' WHERE name='菜鸟教程';
结果:
删 DELETE
①删除指定行记录。
语法:
DELETE FROM table_name WHERE some_column=some_value;
特别地:WHERE 子句规定哪条记录或者哪些记录需要删除。如果您省略了 WHERE 子句,所有的记录都将被删除!
演示:
DELETE FROM Websites WHERE name='百度' AND country='CN';
结果:
②不删除表的情况下,删除表中所有的行。这意味着表结构、属性、索引将保持不变:
语法:
DELETE FROM table_name;或DELETE * FROM table_name;
查 SELECT
语法:
SELECT column_name,column_name FROM table_name;或SELECT * FROM table_name;
演示:
①查询所有列:
SELECT * FROM Websites;
结果:
②查询相应列
下面的 SQL 语句从 "Websites" 表中选取 "name" 和 "country" 列:
SELECT name,country FROM Websites;
结果:
③查询返回唯一不同的值。在表中,一个列可能会包含多个重复值,有时您也许希望仅仅列出不同(distinct)的值,关键词DISTINCT 用于返回唯一不同的值。
下面的 SQL 语句仅从 "Websites" 表的 "country" 列中选取唯一不同的值,也就是去掉 "country" 列重复值:
SELECT DISTINCT country FROM Websites;
结果:
④查询指定记录。关键词WHERE于提取那些满足指定条件的记录。特别的是关键字 WHERE 字符串比较是不区分大小写的。可以通过关键字BINARY 来设定 WHERE 语句的字符串比较大小写。
语法:
SELECT column_name,column_name FROM table_name WHERE column_name ='value';或SELECT column_name,column_name FROM table_name WHERE BINARY column_name ='value';
演示:
下面的 SQL 语句从 "Websites" 表中选取国家为 "CN" 的所有网站:
SELECT * FROM Websites WHERE country='CN';
结果:
⑤条件查询。关键词AND & OR 运算符用于基于一个以上的条件对记录进行过滤。如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。
下面的 SQL 语句从 "Websites" 表中选取国家为 "CN" 且alexa排名大于 "50" 的所有网站:
SELECT * FROM Websites WHERE country='CN' AND alexa > 50;
结果:
下面的 SQL 语句从 "Websites" 表中选取国家为 "USA" 或者 "CN" 的所有客户:
SELECT * FROM Websites WHERE country='USA' OR country='CN';
结果:
下面的 SQL 语句从 "Websites" 表中选取 alexa 排名大于 "15" 且国家为 "CN" 或 "USA" 的所有网站:
SELECT * FROM Websites WHERE alexa > 15 AND (country='CN' OR country='USA');
特别地:把 AND 和 OR 结合起来要使用圆括号来组成复杂的表达式。
结果:
⑥按某种顺序查询。关键字ORDER BY用于对结果集按照一个列或者多个列进行排序,默认按照升序对记录进行排序(ASC)。如果需要按照降序对记录进行排序,您可以使用关键字 DESC 。
语法:
SELECT column_name,column_name FROM table_name ORDER BY column_name,column_name ASC|DESC;
演示:
下面的 SQL 语句从 "Websites" 表中选取所有网站,并按照 "alexa" 列升序排序:
SELECT * FROM Websites ORDER BY alexa ASC;或SELECT * FROM Websites ORDER BY alexa;
结果:
下面的 SQL 语句从 "Websites" 表中选取所有网站,并按照 "alexa" 列降序排序:
SELECT * FROM Websites ORDER BY alexa DESC;
结果:
下面的 SQL 语句从 "Websites" 表中选取所有网站,并按照 "country" 和 "alexa" 列升序排序:
SELECT * FROM Websites ORDER BY country,alexa;
结果:
⑦返回查询的记录数目
SQL支持 SELECT TOP 语句;MySQL 支持 LIMIT 语句;Oracle 支持 ROWNUM 语句来选取指定的条数数据。
SQL语法:
SELECT TOP number|percent column_name(s) FROM table_name;
演示:
下面的 SQL 语句从 websites 表中选取前面百分之 50 的记录:
SELECT TOP 50 PERCENT * FROM Websites;
MySQL语法:
SELECT column_name(s) FROM table_name LIMIT number;
演示:
下面的 SQL 语句从 "Websites" 表中选取头两条记录:
SELECT * FROM Websites LIMIT 2;
结果:
Oracle 语法:
SELECT column_name(s) FROM table_name WHERE ROWNUM <= number;
⑧模糊查询。操作符 LIKE 用于 WHERE 语句中搜索列中的指定模式。在 LIKE 语句中使用 % 字符来表示任意字符。如果没有使用 % ,LIKE 语句与 = 的效果就一样了。
("%" 符号用于在模式的前后定义通配符,默认字母。)
SQL通配符
语法:
SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern;
演示:
下面的 SQL 语句选取 name 以字母 "G" 开始的所有客户:
SELECT * FROM Websites WHERE name LIKE 'G%';
结果:
下面的 SQL 语句选取 name 以字母 "k" 结尾的所有客户:
SELECT * FROM Websites WHERE name LIKE '%k';
结果:
下面的 SQL 语句选取 name 包含模式 "oo" 的所有客户:
SELECT * FROM Websites WHERE name LIKE '%oo%';
结果:
下面的 SQL 语句选取 name 以一个任意字符开始,然后是 "oogle" 的所有客户:
SELECT * FROM Websites WHERE name LIKE '_oogle';
结果:
下面的 SQL 语句选取 name 以 "G" 开始,然后是一个任意字符,然后是 "o",然后是一个任意字符,然后是 "le" 的所有网站:
SELECT * FROM Websites WHERE name LIKE 'G_o_le';
结果:
下面的 SQL 语句选取 name 以 "G"、"F" 或 "s" 开始的所有网站:
SELECT * FROM Websites WHERE name REGEXP '^[GFs]';
结果:
下面的 SQL 语句选取 name 以 A 到 H 字母开头的网站:
SELECT * FROM Websites WHERE name REGEXP '^[A-H]';
结果:
下面的 SQL 语句选取 name 不以 A 到 H 字母开头的网站:
SELECT * FROM Websites WHERE name REGEXP '^[^A-H]';
结果:
特别地:MySQL 中使用 REGEXP 或 NOT REGEXP 运算符 (或 RLIKE 和 NOT RLIKE) 来操作正则表达式。
⑨查询多条指定记录。操作符 IN 允许您在 WHERE 子句中规定多个值。
语法:
SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...);
演示:
下面的 SQL 语句选取 name 为 "Google" 或 "菜鸟教程" 的所有网站:
SELECT * FROM Websites WHERE name IN ('Google','菜鸟教程');
结果:
⑩查询介于某个范围的数据记录。操作符BETWEEN 选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。(如需显示不在上面实例范围内的网站,请使用 NOT BETWEEN)
语法:
SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2;
演示:
下面的 SQL 语句选取 alexa 介于 1 和 20 之间的所有网站:
SELECT * FROM Websites WHERE alexa BETWEEN 1 AND 20;
结果:
下面的 SQL 语句选取 alexa 不介于 1 和 20 之间的所有网站:
SELECT * FROM Websites WHERE alexa NOT BETWEEN 1 AND 20;
结果:
下面的 SQL 语句选取 alexa 介于 1 和 20 之间但 country 不为 USA 和 IND 的所有网站:
SELECT * FROM Websites WHERE (alexa BETWEEN 1 AND 20) AND country NOT IN ('USA', 'IND');
结果:
SQL别名
通过使用 SQL,可以为表名称或列名称指定别名。基本上,创建别名是为了让列名称的可读性更强。
列的SQL别名语法:
SELECT column_name AS alias_name FROM table_name;
演示:
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。(如果列名称包含空格,要求使用双引号或方括号)
SELECT name AS n, country AS c FROM Websites;
结果:
下面的 SQL 语句中,我们把三个列(url、alexa 和 country)结合在一起,并创建一个名为 "site_info" 的别名:
SELECT name, CONCAT(url, ', ', alexa, ', ', country) AS site_info FROM Websites;
结果:
此文是作者在学习过程中总结的一些有关SQL的基本常用的数据库操作笔录,希望可以给小伙伴们带来收获,欢迎在评论区讨论相互学习。