欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

基础SQL语句整理(建议收藏)

程序员文章站 2022-05-25 12:44:46
好久没写sql语句了,面试的时候被怼到,回来之后花了一个晚上怒补了sql的基本知识,下面是参考的sql必知必会写出的基本sql语句,方便以后查看 检索数据 SELECT a...

好久没写sql语句了,面试的时候被怼到,回来之后花了一个晚上怒补了sql的基本知识,下面是参考的sql必知必会写出的基本sql语句,方便以后查看

检索数据

SELECT a1, a2, a3
FROM A;

检索所有数据

SELECT *
FROM A;

去掉检索中重复的值

SELECT DISTINCT vend_id
FROM A;

限制检索结果的行数

SELECT a1, a2, a3
FROM A
LIMIT 5; --这是一条注释

排序检索结果(DESC降序排列)

SELECT a1, a2, a3
FROM A
ORDER BY a1 DESC, a2;

过滤检索结果

SELECT a1, a2, a3
FROM A
where a1 = 1;
-- 其他过滤条件: >, <, BETWEEN, IS NULL

高级过滤

SELECT a1, a2, a3
FROM A
WHERE a1 = 1 AND a2 = 2;
--AND 和 OR
--AND优先级大于OR
SELECT a1, a2, a3
FROM A
WHERE a4 IN (1, 2, 3);
SELECT a1, a2, a3
FROM A
WHERE NOT a1 = 1;

通配符过滤

SELECT a1, a2, a3
FROM A
WHERE pro_name LIKE 'fish%';
--找出所有fish开头的项
--%fish%: 包含fish的项
--f%h: f开头h结尾

拼接SELECT元素结果

SELECT Concat(a1, a2,'(', RTRIM(a3), ')')
FROM A
WHERE NOT a1 = 1;
--RTRIM用来去除多余的空格

使用别名

SELECT Concat(a1, a2,'(', RTRIM(a3), ')')
    AS unit
FROM A
WHERE NOT a1 = 1;

常见的数据处理函数

提取字符串组成部分:
    SUBTRING()
数据类型转换:
    CONVERT()
取当前日期:
    CURDATE()
SQL常用文本处理函数:
    ...(sql必知必会p67)

SQL聚集函数

AVG(): 返回某列的平均值
COUNT(): 返回某列的行数
SUM(): 返回某列值之和
MAX(): 返回某列的最大值
MIN(): 返回某列的最小值

创建分组

SELECT id, COUNT(*) AS NUM
FROM A
GROUP BY id;
--GROUP BY出现在WHERE语句之后,
  ORDER BY语句之前

过滤分组后的数据

SELECT id, COUNT(*) AS NUM
FROM A
GROUP BY id
HAVING COUNT(*) >=2;
--过滤分组前的数据使用WHERE
--HAVING结合GROUP BY使用

子查询

复合语句
有时可以用内联结代替 P110

联结

关系表的设计就是要把信息分解成多个表;
一类数据一个表;
各个表通过某些共同的值互相关联;
使用联结在多个关系表中SELECT数据;
SELECT a1, a2, a3
FROM A, B
WHERE A.b1 == B.b1;
--其中a3在另一个表中
--这种联结成为内联结

内联结的另一个语法

SELECT a1, a2, a3
FROM A INNER JOIN B
ON A.b1 == B.b1;
--检索的表之间存在关联

外联结

SELECT A.a1, B.a2
FROM A LEFT OUTER JOIN B
ON A.b1 == B.b1;
--用于没有关联行的情况
--LEFT表示OUT JOIN左边的表
--(选择左边的表的所有行)
--还有一种FULL OUTER JOIN,全部关联

组合查询(执行多条查询语句后汇总)

SELECT a1, a2, a3
FROM A;
UNION
SELECT a4
FROM A;
--可以使用UNION ALL保留所有行

插入数据

INSERT INTO A(
              id,
              name,
              product)
VALUES(
       1,
       breavo,
       a1);
--复制一个表至另一个表
INSERT INTO A(
              id,
              name,
              product)
SELECT id, name, product
FROM A_NEW;
--上条的简化语法
CREATE TABLE B AS
SELECT * FROM A;

更新数据

UPDATE A
SET a1 = 2,
    a2 = 1
WHERE id = 001;
--删除某列的值,可将值SET为NULL

删除数据

DELETE FROM A
WHERE id = 2;

创建表

CREATE TABLE A
(
  id        CHAR(10)        NOT NULL,
  name      CHAR(254)       NOT NULL    DEFAULT 1,
  product   VARCHAR(1000)   NOT NULL    PRIMARY KEY
  project   VARCHAR(1000)   NOT NULL    REFERENCES
);

更新表

--给表增加一列数据
ALTER TABLE A
ADD project CHAR(20);

使表中的某一列成为主键

ALTER TABLE A
ADD CONSTRAINT PRIMARY KEY(project);

设置外键

ALTER TABLE A
ADD CONSTRAINT FOREIGN KEY (project) REFERENCES B(project)

删除表

DROP TABLE A;

SQL视图

P155

使用存储过程

p166
可以理解为SQL语句的封装

事务处理

使用事务处理,确保成批的SQL操作要么完全执行,要么完全不执行,
用来维护数据库的完整性
事务(transaction)指一组SQL语句
回退(roll back)指撤销执行SQL语句的过程
提交(commit)将未存储的SQL语句结果写入数据库表
保留点(savepoint)指事务处理中设置的临时占位符
事务用来管理的语句
INSERT
DELETE
UPDATE

游标

作用:在检索出来的行中前进或者后退一行或者多行。

主键\外键

主键:保证一列(或一组列)中的值是唯一的
外键:表中的一列,其值必须在另一表的主键中

索引(需要继续寻找资料)

--想象一本书后的索引
CREATE INDEX pro_name_index
ON A(pro_name);