简介

如果懒得安装 可以使用牛客网提供的 https://www.nowcoder.com/practice/1bfe3870034e4efeb4b4aa6711316c3b?tpId=82&&tqId=38359&rp=1&ru=/ta/sql&qru=/ta/sql/question-ranking
https://www.runoob.com/sql/sql-where.html 菜鸟sql 学习
刷题数据库.

limit

选取从上到下限定的数据

where <title> like '%m'

选中 想要的title 有 m结尾的.

select distinct ...

distinct 语义 不同
选择不同的 select distinct grade_num from grade_info;

where

SELECT column_name,column_name
FROM table_name
WHERE column_name operator value;

所有的运算符

运算符 描述
= 等于
<> 不等于。注释:在 SQL 的一些版本中,该操作符可被写成 !=
> 大于
< 小于
>= 大于等于
<= 小于等于
BETWEEN 在某个范围内
LIKE 搜索某种模式
IN 指定针对某个列的多个可能值

AND OR

如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。

select user_id,grade_num from grade_info
where user_id=1 and grade_num = 1;
select user_id,grade_num from grade_info
where user_id=1 or grade_num = 1;

组合成复杂的表达式

select user_id,grade_num from grade_info
where user_id=1 
AND (grade_num=1 or grade_num = 3);

order by

排序关键字

语法

SELECT column_name,column_name
FROM table_name
ORDER BY column_name,column_name ASC|DESC;
select user_id,grade_num from grade_info
order by user_id DESC;
select user_id,grade_num from grade_info
order by user_id ASC;

INSERT INTO

语法

INSERT INTO table_name
VALUES (value1,value2,value3,...);
INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);

Example:

INSERT INTO grade_info (user_id, grade_num, type)
VALUES (5, 1000, 200);

delete

  • 语法
UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;
  • example
update grade_info 
set user_id = 100, type = 'delete'
where grade_num=1;
  • TIPS
执行没有 WHERE 子句的 UPDATE 要慎重,再慎重。
在 MySQL 中可以通过设置 sql_safe_updates 这个自带的参数来解决,当该参数开启的情况下,你必须在update 语句后携带 where 条件,否则就会报错。
set sql_safe_updates=1; 表示开启该参数

delete

语义: 删除

  • 语法
DELETE FROM table_name
WHERE some_column=some_value;
delete from grade_info
where user_id=1;

删除所有数据

DELETE FROM table_name;

SQL 通配符

在SQL中, 通配符有如下几种

运算符 描述
% 替代0个或多个字符
_ 替代一个字符
[charlist] 字符列中的任何单一字符
[^charlist] 或 [!charlist] 不在字符列中的任何单一字符
[1] 以字符列开头的字符串
[charlist]$ 以字符列结尾的字符串
  • example
select * from grade_info
where type like 'ad_';

IN

即在列表之中

SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...);
  • example
select * from grade_info
where grade_num in (3,2,4);

BETWEEN

BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。

SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
select * from grade_info
where grade_num between 1 and 3;
  • tips
    包括端点

别名 AS

SELECT column_name AS alias_name
FROM table_name;
SELECT column_name(s)
FROM table_name AS alias_name;
  • example
SELECT name, CONCAT(url, ', ', alexa, ', ', country) AS site_info
FROM Websites;

CONCAT 连接的意思, 将这些数据连接

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="菜鸟教程";

join

重点: 考察左连 右连
INNER JOIN:如果表中有至少一个匹配,则返回行
LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
FULL JOIN:只要其中一个表中存在匹配,则返回行

INNER JOIN

简单来说将两个表 连接成一个表进行查询.

SELECT Websites.id, Websites.name, access_log.count, access_log.date
FROM Websites
INNER JOIN access_log
ON Websites.id=access_log.site_id;

left join


LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。

SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;

注意 和 on 匹配.
可以看到包含user的所有信息, 当右边不存在时候结果为null. 但是这里显示的是none. 应该是应该显示处理了

1|tm|1|1
2|wwy|None|None
3|zk|5|3
3|zk|4|3
3|zk|3|3
3|zk|2|3
3|zk|1|3
4|qq|None|None
5|lm|None|None

right join

SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name=table2.column_name;

full join

mysql 不支持 full outer join

SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name=table2.column_name;

UNION

选取不同的值 UNION ALL 来选取重复的值!

SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

SELECT INTO

复制到新表
mysql 不支持, 先不写了

INSERT INTO SELECT

从一个表中赋值所有的列插入到另一个已存在的表中

INSERT INTO table2
SELECT * FROM table1;
INSERT INTO Websites (name, country)
SELECT app_name, country FROM apps;
INSERT INTO user (id, name)
select user_id, type from grade_info;

FOREIGN KEY

外键, 用来在建立表的时候就构建连接关系, 防止破坏标的连接关系.

ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)

视图

视图总是显示最新的数据!每当用户查询视图时,数据库引擎通过使用视图的 SQL 语句重建数据。

CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition

可以如此查询视图
SELECT * FROM [Current Product List]
[Current Product List] 是创建出来的视图

IS NULL IS NOT NULL

SELECT LastName,FirstName,Address FROM Persons
WHERE Address IS NOT NULL

IFNULL(UnitsOnOrder,0) 如果 UnitsOnOrder 是 NULL 那么给他赋值为0

AVG

SELECT AVG(column_name) FROM table_name

group by

以什么标题来进行聚合, 就是合并显示. 通常带上SQL的各种函数.

select user_id, sum(grade_num) as num from
grade_info
group by user_id;

having

因为 where 不能和 聚合函数 group by 一起使用.

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value;

# EXISTS 接 子查询

SELECT Websites.name, Websites.url
FROM Websites
WHERE EXISTS (SELECT count FROM access_log WHERE Websites.id = access_log.site_id AND count > 200);



  1. charlist ↩︎

posted on 2021-06-30 21:12  HDU李少帅  阅读(40)  评论(0编辑  收藏  举报