一些SQL基础操作
Posted 李元芳芳芳
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一些SQL基础操作相关的知识,希望对你有一定的参考价值。
一.DDL–操作数据库和表
1.查询
SHOW DATABASES;
2.创建
创建数据库
CREATE DATABASE 数据库名称;
创建数据库(判断,如果不存在则创建)
CREATE DATABASE IF NOT EXISTS 数据库名称;
3.删除
删除数据库
DROP DATABASE 数据库名称;
删除数据库(判断,如果存在则删除)
DROP DATABASE IF EXISTS 数据库名称;
4.使用数据库
查看当前使用的数据库
SELECT DATABASE();
使用数据库
USE 数据库名称;
5.查询表
查询当前数据库下所有表名称
SHOW TABLES;
查询表结构
DESC 表名称;
6.创建表
CREATE TABLE 表名 (
字段名1 数据类型1,
字段名2 数据类型2,
...
字段名n 数据类型n,
);
7.删除表
删除表
DROP TABLE 表名;
删除表时判断表是否存在
DROP TABLE IF EXISTS 表名;
8.修改表
修改表名
ALTER TABLE 表名 RENAME TO 新的表名;
添加一列
ALTER TABLE 表名 ADD 列名 数据类型;
修改数据类型
ALTER TABLE 表名 MODIFY 列名 新数据类型;
修改列名和数据类型
ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型;
删除列
ALTER TABLE 表名 DROP 列名;
二.DML-- 操作数据
1.删除数据
DELETE FROM 表名 [WHERE 条件];
2.添加数据
给指定列添加数据
INSERT INTO 表名(列名1,列名2,...) VALUES(值1,值2,...);
给全部列添加数据
INSERT INTO 表名 VALUES(值1,值2,...);
批量添加数据
INSERT INTO 表名(列名1,列名2,...) VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...)...;
INSERT INTO 表名 VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...)...;
3.修改数据
修改表数据
UPDATE 表名 SET 列名1=值1,列名2=值2,... [WHERE 条件];
三.DQL
1.基础查询
查询多个字段
SELECT 字段列表 FROM 表名;
SELECT * FROM 表名;--查询所有数据
去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;
起别名
AS: AS 也可以省略
2.条件查询(WHERE)
语法:
SELECT 字段列表 FROM 表名 WHERE 条件列表;
条件:
3.排序查询(ORDER BY)
SELECT 字段列表 FROM 表名 ORDER BY 排序字段名1 [排序方式1],排序字段名2 [排序方式2] ...;
排序方式:
ASC : 升序排列 (默认值)
DESC :降序排列
注意:如果有多个排序条件,当前边的条件值一样时,才会根据第二条件进行排序
4.分组查询(GROUP BY)
SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后条件过滤];
注意:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义
where和having的区别:
执行时机不一样:where是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤
可判断的条件不一样:where不能对聚合函数进行判断,having可以。
执行顺序:where>聚合函数>having
5.分页查询(LIMIT)
SELECT 字段列表 FROM 表名 LIMIT 起始索引 , 查询条目数;
起始索引:从0开始
计算公式:起始索引=(当前页码-1)* 每页显示的条数
tips:
分页查询limit是mysql数据库的方言
Oracle分页查询使用rownumber
SQL Server分页查询使用top
6.聚合函数
SELECT 聚合函数名(列名) FROM 表;
--null值不参与所有聚合函数运算
count、max、min、sum、avg
四.数据类型
五.约束
外键约束
添加约束
-- 创建表时添加外键约束
CREATE TABLE 表名(
列名 数据类型,
...
[CONSTRAINT] [外键名称] FOREIGN KEY(外键列名) REFERENCES 主表(主表列名)
);
-- 建完表之后添加外键约束
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);
删除约束
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称
六.多表查询
内连接
--隐式内连接
SELECT 字段列表 FROM 表1,表2... WHERE 条件;
--显式内连接
SELECT 字段列表 FROM 表1,表2 [INNER] JOIN 表2 ON 条件;
外连接
--左外连接
SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件;
--右外连接
SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件;
子查询
七.事务
数据库的事务是一种机制、一个操作序列,包含了一组数据库操作命令
要么同时成功,要么同时失败
事务是一个不可分割的工作逻辑单元
-- 开启事务
START TRANSACTION
或者BEGIN;
-- 提交事务
COMMIT;
-- 回滚事务
ROLLBACK;
事务四大特征(ACID)
原子性(Atomicity):事务是不可分割的最小操作单位,要么同时成功,要么同时失败
一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态
隔离性(Isolation):多个事务之间,操作的可见性
持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的
MySQL事务默认自动提交
--查看事务的默认提交方式
SELECT @@autocommit;
-- 1 自动提交 0 手动提交
-- 修改事务提交方式
set @@autocommit = 0;
以上是关于一些SQL基础操作的主要内容,如果未能解决你的问题,请参考以下文章
spark关于join后有重复列的问题(org.apache.spark.sql.AnalysisException: Reference '*' is ambiguous)(代码片段