便捷工具 DataGrip(图形化界面工具)
一、sql语句执行顺序
SQL语句的执行顺序如下:
-
FROM子句:确定数据来源,包括JOIN的表。
-
ON:执行JOIN条件。
-
JOIN:如果有JOIN,根据JOIN类型(如INNER、LEFT),将相关行组合起来。
-
WHERE子句:过滤记录。
-
GROUP BY子句:根据指定的列分组记录。
-
HAVING子句:过滤分组。
-
SELECT子句:选取特定的列。
-
DISTINCT子句:去除重复数据。
-
ORDER BY子句:最后对结果进行排序。
-
LIMIT子句(MySQL特有):限制输出行数。
这是一个简单的SQL查询例子,展示了上述各个步骤的顺序:
SELECT DISTINCT column1 FROM table1
JOIN table2 ON table1.column_id = table2.column_id
WHERE column2 = 'some_value'
GROUP BY column1 HAVING COUNT(*) > 1
ORDER BY column1 L
IMIT 10;
在这个例子中,数据首先从table1
和table2
中获取,通过ON
子句进行JOIN,然后应用WHERE
子句进行过滤,接着根据column1
进行分组并使用HAVING
子句过滤分组,选取column1
,去除重复记录,最后按column1
排序,并限制输出结果为10行。
二、
-- 创建索引
CREATE INDEX index_name
ON table_name (column_name)
eg:
CREATE index 名称 on resume(rname); //注:名称不加引号
-- 删除索引
DROP INDEX index_name
ON table_name
eg:
DROP INDEX 名称 on resume;
-- 新增列
ALTER TABLE table_name
ADD column_name data_type
eg:
alter table resume add sex char(2);
-- 删除列
ALTER TABLE table_name
DROP column_name
eg:
alter TABLE resume DROP sex ;
-- MySQL创建表 并插入数据 表必须存在
-- 创建新表 复制表结构,不包括数据
CREATE TABLE selinto like resume;
-- 插入数据
insert into selinto SELECT * from resume WHERE rname like'工程%';
-- SQL Server、 PostgreSQL 可支持 创建表同时插入语句
SELECT * INTO selinto FROM resume WHERE rname='工四';
eg:
-- SQL 语句选取 name 以 "G"、"F" 或 "s" 开始的语句
SELECT * FROM Websites WHERE name REGEXP '^[GFs]';
-- name 以 A 到 H 字母开头的语句
SELECT * FROM Websites WHERE name REGEXP '^[A-H]';
-- name 不以 A 到 H 字母开头的语句
SELECT * FROM Websites WHERE name REGEXP '^[^A-H]';
-- 选取name 为 "Google" 或 "菜鸟教程" 的语句
SELECT * from resume where rname in('项目4号','工程项目三号');
-- 选取 name 以介于 'A' 和 'H' 之间字母开始的所有语句
SELECT * FROM Websites WHERE name BETWEEN 'A' AND 'H';
-- 把两列结合在一起 并命名
SELECT CONCAT(sid,',',rname) as othername from resume;
-- EXPLAIN 关键字查看索引
explain SELECT * from ss;
-- show index关键字用于查看某一表中的所有索引
show index from ss;
-- 创建索引 alter 普通索引 index normal_index(id),唯一索引 unique index unique_index(username),多列索引 index multi_index(username, email)
alter table ss add index multi_index(sname(9));
-- alter 关键字删除索引
alter table [表名] drop index [索引名];
-- 从ss表中删除multi_index索引
alter table ss drop index multi_index;
-- drop 关键字删除索引
drop index [索引名] on [表名]
drop index unique_index on ss;
-- 创建索引
create unique [unique|fulltext|spatial] index [索引名] ON [表名](
[属性名1] [(长度)] [asc | desc],
...
[属性名n] [(长度)] [asc | desc]
);
CREATE UNIQUE index unique_index on ss(price);
-- 查看排序缓冲区大小
show VARIABLES like 'sort_buffer_size';
-
INNER JOIN(简写 join):如果表中有至少一个匹配,则返回行
-
LEFT JOIN(也可写为 left outer join):即使右表中没有匹配,也从左表返回所有的行
-
RIGHT JOIN(也可写为 right outer join):即使左表中没有匹配,也从右表返回所有的行
-
FULL JOIN(也可写为 full outer join):只要其中一个表中存在匹配,则返回行
索引
优点:
提高查询效率,
提高排序效率
缺点:(可忽略)
占用磁盘空间(便宜)
影响增删改的效率注:如果没有特别指明,都是指B+树结构组织的索引。
二叉树、红黑树二叉树缺点:顺序插入时,会形成一个链表,查询性能大大降低。大数据量情况下,层级较深,检索速度慢。 (最多有两个分支)
红黑树缺点:大数据量情况下,等级较深、检索速度慢。
绿色为数据内容