sql-v1.1
2022-01-11 17:43:01 11 举报
AI智能生成
mysql思维导图
作者其他创作
大纲/内容
1.基础教程
去重DISTINCT
语句:SELECT DISTINCT column_name,column_name
FROM table_name;
FROM table_name;
疑问:对某个或者多个字段怎么去重
and & or
语句:SELECT * FROM Websites
WHERE country='CN'
AND alexa > 50;
排序order by
语句:SELECT column_name,column_name
FROM table_name
ORDER BY column_name,column_name ASC|DESC;
FROM table_name
ORDER BY column_name,column_name ASC|DESC;
ASC升序(默认),DESC降序
desc 或者 asc 只对它紧跟着的第一个列名有效,其他不受影响,仍然是默认的升序
order by A,B 这个时候都是默认按升序排列
order by A desc,B 这个时候 A 降序,B 升序排列
order by A ,B desc 这个时候 A 升序,B 降序排列
插入语句INSERT INTO
语法1:无需指定要插入数据的列名,只需提供被插入的值即可INSERT INTO table_name
VALUES (value1,value2,value3,...);
VALUES (value1,value2,value3,...);
语法:需要指定列名及被插入的值INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);
VALUES (value1,value2,value3,...);
更新UPDATE
语句:UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;
删除DELETE
语句:DELETE FROM table_name
WHERE some_column=some_value;
WHERE some_column=some_value;
2.高级教程
返回top数据SELECT TOP
语句:SELECT column_name(s)
FROM table_name
LIMIT number;
FROM table_name
LIMIT number;
操作符LIKE
语句:SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;
FROM table_name
WHERE column_name LIKE pattern;
'%a' //以a结尾的数据
'a%' //以a开头的数据
'%a%' //含有a的数据
‘_a_’ //三位且中间字母是a的
'_a' //两位且结尾字母是a的
'a_' //两位且开头字母是a的
select * from username where 用户名 like '段_%' -- 会查出来段煜 段鑫
select * from username where 用户名 like '段\_%' escape '\' -- 通过 \转义,只能查出来 段_煜
LIKE NOT LIKE
通配符
语句:SELECT * FROM Websites
WHERE url LIKE 'https%';
WHERE url LIKE 'https%';
% 替代 0 个或多个字符
_ 替代一个字符
[charlist] 字符列中的任何单一字符
[^charlist]或[!charlist] 不在字符列中的任何单一字符
IN
语句:SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...);语句
FROM table_name
WHERE column_name IN (value1,value2,...);语句
IN 操作符允许您在 WHERE 子句中规定多个值。
between
语句:SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;语句
FROM table_name
WHERE column_name BETWEEN value1 AND value2;语句
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
NOT BETWEEN
别名as
语句:SELECT column_name AS alias_name
FROM table_name;语句
FROM table_name;语句
JOIN
合并表UNION
语法:SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
UNION
SELECT column_name(s) FROM table2;
UNION ALL 来选取重复的值
复制表数据SELECT INTO
复制数据插入新表
复制表数据INSERT INTO SELECT
复制数据插入已存在表
创建数据库CREATE DATABASE
CREATE DATABASE my_db;
创建表CREATE TABLE
CREATE TABLE table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
....
);
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
....
);
约束
NOT NULL - 指示某列不能存储 NULL 值。
UNIQUE - 保证某列的每行必须有唯一的值。
PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
CHECK - 保证列中的值符合指定的条件。
DEFAULT - 规定没有给列赋值时的默认值。
UNIQUE - 保证某列的每行必须有唯一的值。
PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
CHECK - 保证列中的值符合指定的条件。
DEFAULT - 规定没有给列赋值时的默认值。
索引
CREATE INDEX index_name
ON table_name (column_name) 查询快,允许重复
ON table_name (column_name) 查询快,允许重复
删除drop
删表
DROP TABLE table_name
删库
DROP DATABASE database_name
删表内数据
TRUNCATE TABLE table_name
删索引
ALTER TABLE table_name DROP INDEX index_name
列操作
加列
ALTER TABLE table_name
ADD column_name datatype
ADD column_name datatype
删列
ALTER TABLE table_name
DROP COLUMN column_name
DROP COLUMN column_name
改列类型
ALTER TABLE table_name
MODIFY COLUMN column_name datatype
MODIFY COLUMN column_name datatype
自动创建主键AUTO INCREMENT
CREATE TABLE Persons
(
ID int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (ID)
)
(
ID int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (ID)
)
图示CREATE VIEW
数据类型
3.函数
Aggregate 函数
SQL Aggregate 函数计算从列中取得的值,返回一个单一的值。
AVG() - 返回平均值
SELECT AVG(column_name) FROM table_name
COUNT() - 返回行数 NULL不计入
SELECT COUNT(column_name) FROM table_name;
FIRST() - 返回第一个记录的值
LAST() - 返回最后一个记录的值
MAX() - 返回最大值
MIN() - 返回最小值
SUM() - 返回总和
SQL Scalar 函数
SQL Scalar 函数基于输入值,返回一个单一的值。
UCASE() - 将某个字段转换为大写
LCASE() - 将某个字段转换为小写
MID() - 从某个文本字段提取字符,MySql 中使用
SubString(字段,1,end) - 从某个文本字段提取字符
LEN() - 返回某个文本字段的长度
ROUND() - 对某个数值字段进行指定小数位数的四舍五入
NOW() - 返回当前的系统日期和时间
FORMAT() - 格式化某个字段的显示方式
SELECT FORMAT(column_name,format) FROM table_name;
SELECT name, url, DATE_FORMAT(Now(),'%Y-%m-%d') AS date
FROM Websites;
FROM Websites;
GROUP BY
用于结合聚合函数,根据一个或多个列对结果集进行分组
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
HAVING
WHERE 关键字无法与聚合函数一起使用。
HAVING 子句可以让我们筛选分组后的各组数据。
HAVING 子句可以让我们筛选分组后的各组数据。
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;
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value;
总访问量大于 200 的网站
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, 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;
EXISTS 运算符
EXISTS 运算符用于判断查询子句是否有记录,如果有一条或多条记录存在返回 True,否则返回 False。
SELECT column_name(s)
FROM table_name
WHERE EXISTS
(SELECT column_name FROM table_name WHERE condition);
FROM table_name
WHERE EXISTS
(SELECT column_name FROM table_name WHERE condition);
0 条评论
下一页