例:
SELECT * FROM Websites WHERE name REGEXP '^[GFs]';
SELECT * FROM Websites WHERE name REGEXP '^[A-H]';
SELECT * FROM Websites WHERE name IN ('Google','菜鸟教程');
SELECT * FROM Websites WHERE (alexa BETWEEN 1 AND 20) AND country NOT IN ('USA', 'IND');
SELECT * FROM Websites WHERE name BETWEEN 'A' AND 'H';
SELECT name, CONCAT(url, ', ', alexa, ', ', country) AS site_info FROM Websites;
SELECT w.name, w.url, a.count, a.date
FROM Websites AS w, access_log AS a
WHERE a.site_id=w.id and w.name="菜鸟教程";
语句:
SELECT Websites.name, access_log.count, access_log.date
FROM Websites
INNER JOIN access_log
ON Websites.id=access_log.site_id
ORDER BY access_log.count;
UNION 操作符用于合并两个或多个 SELECT 语句的结果集,并去除重复的行。
请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。允许重复的值,请使用 UNION ALL。
SELECT country, name FROM Websites
WHERE country='CN'
UNION ALL
SELECT country, app_name FROM apps
WHERE country='CN'
ORDER BY country
主键必须是唯一的且不能为空的,必须存在的
FOREIGN KEY 约束用于预防破坏表之间连接的行为。
FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一
ALTER TABLE Persons
MODIFY Age int NOT NULL;
ALTER TABLE Persons
ADD UNIQUE (P_Id);
ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID(名字) UNIQUE (P_Id,LastName)
ALTER TABLE Persons
DROP INDEX uc_PersonID
ALTER TABLE Persons
DROP PRIMARY KEY
ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
更新一个包含索引的表需要比更新一个没有索引的表花费更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。
CREATE INDEX index_name
ON table_name (column_name)
CREATE UNIQUE INDEX index_name
ON table_name (column_name)
DROP 语句,可以轻松地删除索引、表和数据库
如果我们仅仅需要删除表内的数据,但并不删除表本身,那么我们该如何做
Auto-increment 会在新记录插入表中时生成一个唯一的数字
视图是基于 SQL 语句的结果集的可视化的表。视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段
注释:视图总是显示最新的数据!每当用户查询视图时,数据库引擎通过使用视图的 SQL 语句重建数据。
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
DROP VIEW view_name
现在运营想要计算出2021年8月每天用户练习题目的数量,请取出相应数据。
select day(date) as day,
count(question_id) as question_cnt
from question_practice_detail
where month(date)=8 and year(date)=2021
group by date
SELECT * FROM employees WHERE department_id IS NULL;
SELECT* FROM employees WHERE department_id IS NOT NULL;
MySQL:
SELECT product_name, COALESCE(stock_quantity, 0)AS actual_quantity FROM products;
SQL:
SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))
FROM Products
(1)SQL Aggregate 函数计算从列中取得的值,返回一个单一的值:
SELECT AVG(column_name) FROM table_name
(2)SQL Scalar 函数基于输入值,返回一个单一的值:
从name列中提取前4个字符:
SELECT MID(name,1,4) AS ShortTitle
FROM Websites;
SELECT name, url, DATE_FORMAT(Now(),'%Y-%m-%d') AS date
FROM Websites;
SELECT site_id, SUM(access_log.count) AS nums
FROM access_log GROUP BY site_i
多表链接:
SELECT Websites.name,COUNT(access_log.aid) AS nums FROM access_log
LEFT JOIN Websites
ON access_log.site_id=Websites.id
GROUP BY Websites.name;
SELECT name, SUM(signin) as signin_count FROM employee_tbl GROUP BY name WITH ROLLUP;
select coalesce(a,b,c);参数说明:如果 a==null,则选择 b;如果 b==null,则选择 c;如果 a!=null,则选择 a;如果 a b c 都为 null ,则返回为 null(没意义)。
SELECT coalesce(name, '总数'), SUM(signin) as signin_count FROM employee_tbl GROUP BY name WITH ROLLUP;
17.replace函数
REPLACE() 函数用于替换字符串中的指定子字符串。它接受三个参数:原始字符串、要被替换的子字符串和替换后的新子字符串。
---替换字符串中的单个子字符串
SELECT REPLACE('Hello World', 'World', 'Universe'); -- 输出: Hello Universe
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。
HAVING 子句可以让我们筛选分组后的各组数据。
1.where在group by前, having在group by 之后
2.聚合函数(avg、sum、max、min、count),不能作为条件放在where之后,但可以放在having之后
SELECT Websites.name, Websites.url, SUM(access_log.count) AS nums FROM (access_log
INNER JOIN Websites
ON access_log.site_id=Websites.id)
GROUP BY Websites.name
HAVING SUM(access_log.count) > 200;
SELECT Websites.name, SUM(access_log.count) AS nums FROM Websites
INNER JOIN access_log
ON Websites.id=access_log.site_id
WHERE Websites.alexa < 200
GROUP BY Websites.name
HAVING SUM(access_log.count) > 200;
EXISTS 运算符用于判断查询子句是否有记录,如果有一条或多条记录存在返回 True,否则返回 False
SELECT Websites.name, Websites.url
FROM Websites
WHERE EXISTS (SELECT count FROM access_log WHERE Websites.id = access_log.site_id AND count > 200);
SELECT Websites.name, Websites.url
FROM Websites
WHERE NOT EXISTS (SELECT count FROM access_log WHERE Websites.id = access_log.site_id AND count > 200);
SUBSTRING_INDEX(str, delim, count)
其中,
datediff 函数是一种用于计算两个日期之间的天数差异的函数。在不同的编程语言和数据库中,其具体实现方式可能会有所不同,但通常都需要输入两个日期作为参数,然后返回它们之间相差的天数。
DATEDIFF('2022-12-31', '2022-12-01')