例:
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')