列出服务器管理的数据库
show DATABASES
用于显示当前选定的 MySQL 数据库中的所有表
SHOW TABLES
显示有关给定表中的列的信息
SHOW COLUMNS
SHOW COLUMNS FROM orders;
DISTINCT 关键字
与 SELECT 结合使用,以去掉所有重复的记录,仅返回唯一的记录。
基本语法
SELECT DISTINCT column_name1, column_name2 FROM table_name;
eg:
select DISTINCT firstname,lastname from CUSTOMERS;
LIMIT 关键字
语法如下:
SELECT column list
FROM table_name
LIMIT [number of records];
也可以从特定的偏移量中选取一组记录。
在下面的例子中,我们从第三个位置开始选取四条记录:
#MySQL 是从零开始计数的,意味着第一行的偏移量是 0,而不是 1
SELECT ID, FirstName, LastName, City
FROM customers LIMIT 1, 2;
完全限定名称
在 SQL 中,你可以在列名之前提供表名,通过用点分隔。
以下语句是等效的:
SELECT City FROM customers;
SELECT customers.City FROM customers;
当使用多个可能共享相同列名的表时,这种写法是特别有用的。
排序
SELECT * FROM customers
ORDER BY FirstName;
SELECT * FROM customers
ORDER BY FirstName DESC;
多列排序
将对多个列使用 ORDER BY 时,请使用逗号分隔列的列表以跟随 ORDER BY,
它将按列出的第一列排序,然后按第二列排序,依此类推
SELECT * FROM customers ORDER BY lastname,age;
BETWEEN 运算符
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
BETWEEN子句的语法如下:
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
select * from customers where age between 18 and 19;
and 与 or 结合
select * from customers where lastname = 'ho' and (age =18 or age =19);
IN运算符
select * from customers where lastname in ('ho','hu');
NOT IN 运算符允许你从结果集中排除特定值的列表。
select * from customers where lastname not in ('ho','hu');
CONCAT() 函数
CONCAT() 函数用于连接两个或多个文本值,并返回连接字符串。
select CONCAT(firstname,' ',lastname) from customers;
AS 关键字
为结果列分配自定义名称,指定新列名
一个连接导致一个新的列。默认列名称将是 CONCAT 函数(等函数)。
可以使用 AS 关键字为结果列分配自定义名称:
select CONCAT(firstname,' ',lastname) as name from customers;
算术运算符
算术运算符对数值操作数执行算术运算。算术运算符包括加法(+),减法(-),乘法(*)和除法(/)
select ID, FirstName, LastName, age+10 as age from customers;
UPPER() 函数与LOWER() 函数
前者将指定字符串中的所有字母转换为大写,后者将字符串转换为小写
如果字符串中的字符不是字母,则此函数对它们没有影响
select firstname, UPPER(lastname) from customers;
select firstname, UPPER(lastname) as lastname from customers;
SQRT() 和 AVG() 函数
#SQRT() 函数返回参数中给定值的平方根
#AVG() 函数返回数值列的平均值:
select age,SQRT(age) from customers;
select age,AVG(age) from customers;
SUM() 函数
#SUM() 函数返回数值列的总数。
select SUM(age) from customers;
子查询
#当一个查询是另一个查询的条件时,称之为 子查询。
select * from customers where age > (select AVG(age) FROM customers) ORDER BY age desc;
#将子查询括在括号中。另外,子查询结尾处没有分号,因为它是单个查询的一部分。
LIKE 操作符
# LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。
# SQL 的模式匹配允许你使用 “_” 匹配任何单个字符,而使用 “%” 匹配任意数目字符(包括零个字符)
select * from customers where firstname like '%o%';
MIN() 函数
返回指定列的最小值
select MIN(age) from customers;
select firstname,MIN(age) from customers where firstname like '%o%' and age in(18,19,20);
表连接
#“表连接” 表示组合来自两个或多个表的数据。表连接创建一个临时表,显示连接表中的数据。
-- 要连接这两个表,在 FROM 子句中将它们指定为逗号分隔列表
select guest.id,guest.name,orders.name,orders.amount
from guest,orders
where guest.id = orders.guest_id
order by guest.id;
使用【AS】为连接列或表指定别名
select guest.id,guest.name as guest_name,orders.name as
from guest,orders
where guest.id = orders.guest_id
order by guest.id;
连接类型
-- 以下是可以在 SQL 中使用的连接类型:
-- 内连接(INNER JOIN) 等同于JOIN
-- 左连接(LEFT JOIN)
-- 右连接 (RIGHT JOIN)
-- ON 关键字用于指定内部连接条件。
-- 语法:
# 1.内连接(INNER JOIN)
SELECT column_name(s)
FROM table1 INNER JOIN table2
ON table1.column_name = table2.column_name;
# 2.左连接(LEFT JOIN)
-- LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。
-- 如果右表中没有匹配,则列结果为 NULL。
-- 语法
SELECT table1.column1, table2.column2...
FROM table1 LEFT OUTER JOIN table2
ON table1.column_name = table2.column_name;
SELECT guest.*,orders.amount
FROM guest LEFT JOIN orders
ON guest.name = orders.name;
# 3.右连接(RIGHT JOIN)
-- RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。
-- 如果左表中没有匹配,则结果为 NULL。
-- 基本语法如下:
SELECT table1.column1, table2.column2...
FROM table1 RIGHT OUTER JOIN table2
ON table1.column_name = table2.column_name;
SELECT orders.*,guest.name as guest_name
FROM guest RIGHT JOIN orders
ON guest.name = orders.name;
UNION 操作符
-- 有时候,你可能需要将多个表的数据合并为一个综合数据集。这可能是在相同数据库中具有相似数据的表,或者可能需要在数据库、甚至跨服务器上合并相似的数据。
-- 要完成此操作,请使用 UNION 和 UNION ALL 操作符。
-- UNION 将多个数据集合并到单个数据集中,并删除任何现有的重复项。
-- UNION ALL 将多个数据集合并到一个数据集中,但不会删除重复的行。
-- UNION ALL 比 UNION 快,因为它不会对数据集执行重复删除操作。
-- UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
-- 请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。
-- SQL UNION 语法:
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
-- 提示:如果你的列在所有查询中不完全匹配,您可以使用NULL(或任何其他)值。
-- SQL 语句将如下所示:
SELECT FirstName, LastName, Company FROM table3
UNION
SELECT FirstName, LastName, NULL FROM table4;
SELECT id,age,FirstName FROM customers
UNION
SELECT id,age,NULL FROM guest;
SQL 约束
-- 在 SQL 中,我们有如下约束:
-- NOT NULL - 指示某列不能存储 NULL 值。
-- UNIQUE - 保证某列的每行必须有唯一的值。
-- PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
-- FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
-- CHECK - 保证列中的值符合指定的条件。
-- DEFAULT - 规定没有给列赋值时的默认值。
-- 约束可以在创建表时规定(通过 CREATE TABLE 语句),或者在表创建之后规定(通过 ALTER TABLE 语句)。
ALTER TABLE
-- ALTER TABLE 语句用于在已有的表中添加、删除或修改列。
-- 还可以使用 ALTER TABLE 命令在现有表上添加和删除各种约束。
-- 添加列: ALTER TABLE TABLE_NAME ADD COLUMN_NAME DATA_TYPE ;
-- 删除列: ALTER TABLE TABLE_NAME DROP COLUMN COLUMN_NAME;
-- 重命名列: ALTER TABLE TABLE_NAME CHANGE OLD_COLUMN_NAME NEW_COLUMN_NAME DATA_TYPE;
-- 删除整表:DROP TABLE TABLE_NAME;
-- 重命名表:RENAME TABLE OLD_TABLE_NAME TO NEW_TABLE_NAME;
视图
-- 在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。
-- 视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。
-- 你可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,也可以呈现数据,就像这些数据来自于某个单一的表一样。
-- 视图总是显示最新的数据!每当用户查询视图时,数据库引擎通过使用视图的 SQL 语句重建数据
-- SQL CREATE VIEW 语法:
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition;