IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 数据库基础知识-SQL语句 -> 正文阅读

[大数据]数据库基础知识-SQL语句

SQL语句分类

1、数据定义语言DDL
CREATE,DROP,ALTER对逻辑结构等有操作的,其中包括表结构,视图和索引

2、数据查询语言DQL
各种简单查询,连接查询等

3、数据操纵语言DML
对数据进行操作的,数据操纵分成数据查询和数据更新两类

4、数据控制功能DCL
GRANT,REVOKE,COMMIT,ROLLBACK主要为以上操作 即对数据库安全性完整性等有操作的,可以简单的理解为权限控制等。


查询

关联查询

交叉连接cross join,很少使用
内连接 inner join,简写为join
外连接:left join/right jion
联合查询(union、union all):前提,两张表的列数要一致,union会合并相同的行,union all不会

有一个显而易见的SQL优化的方案是,当两张表的数据量比较大,又需要连接查询时,应该使用 FROM table1 JOIN table2 ON xxx的语法,避免使用 FROM table1,table2 WHERE xxx 的语法,因为后者会 在内存中先生成一张数据量比较大的笛卡尔积表,增加了内存的开销。

子查询

条件:一条SQL语句的查询结果做为另一条查询语句的条件或查询结果
嵌套:多条SQL语句嵌套使用,内部的SQL查询语句称为子查询。

1、子查询是单行单列的情况:结果集是一个值,父查询使用:=、 <、 > 等运算符
– 查询工资最高的员工是谁?

 select  * from employee where salary=(select max(salary) from employee);   

2、子查询是多行单列的情况:结果集类似于一个数组,父查询使用:in 运算符

-- 查询开发部与财务部所有的员工信息
select * from emp where dept_id in (select id from dept where name in("开发部","财务部")); 

-- 查询工资大于 5000 的员工,来自于哪些部门的名字
select name from dept where id in (select dept_id from emp where salary > 5000); 

3、子查询是多行多列的情况:结果集类似于一张虚拟表,不能用于where条件,用于select子句中做为子表
– 1) 查询出2011年以后入职的员工信息-- 2) 查询所有的部门信息,与上面的虚拟表中的信息比对,找出所有部门ID相等的员工。select * from dept d, (select * from employee where join_date > ‘2011-1-1’) e where e.dept_id = d.id;

– 使用表连接:select d., e. from dept d inner join employee e on d.id = e.dept_id where e.join_date > ‘2011-1-1’

mysql中 in 和 exists 区别
in查询相当于多个or条件的叠加
exists语句是对外表作loop循环,每次loop循环再对内表进行查询。 区别:
1.如果查询的两个表大小相当,那么用in和exists差别不大。
2.如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in。
3.not in 和not exists:如果查询语句使用了not in,那么内外表都进行全表扫描,没有用到索引;而not extsts的子查询依然能用到表上的索引。所以无论那个表大,用not exists都比not in要快。

常用sql语句

查询:Select * from table_name
字段查询:select fileds from table_name
条件查询:Select * from table_name where xx
排序: Select * from table_name order by x sec
分页:Select * from table_name limit 0,10
去重:Select distinct(x) from table_name

条件查询
比较:= > < <>(不等于)
通配:like
范围限定 :and
子集限定:in
逻辑关系:and or not

聚合查询
语法:group by 字段 having 条件
常用函数 count,max,min,sum,avg

select count(字段) from 表 group by 字段
select count(字段) from 表 group by 字段 having 字段=’xx’

LIMIT n 等价于 LIMIT 0,n。

Insert into 表(字段)valuse(数据)

提高数据插入效率的基本原则:

  • 批量插入数据的效率比单数据行插入的效率高
  • 插入无索引的数据表比插入有索引的数据表快一些
  • 较短的SQL语句的数据插入比较长的语句快

使用load data语句要比INSERT语句效率高,因为它批量插入数据行。服务器只需要对一个语句(而不是多个语句)进行语法分析和解释。索引只有在所有数据行处理完之后才需要刷新,而不是每处理一行都刷新。

如果只能使用INSERT语句,那就要使用将多个数据行在一个语句中给出的格式:INSERT INTO table_name
VALUES(…),(…),…,这将会减少你需要的语句总数,最大程度地减少了索引刷新的次数。

LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl;

Update 表 set 字段=赋值 where xx

Delete from 表 where 条件

drop、delete与truncate的区别
> 三者都表示删除,但是三者有一些差别: 	Delete	Truncate	Drop类型	属于DML	属于DDL	属于DDL 回滚	可回滚	不可回滚	不可回滚删除内容	表结构还在,删除表的全部或者一部分数据行	表结构还在,删除表中的所有数据	从数据库中删除表,所有的数据行,索引和权限也会被删除删除速度	删除速度慢,需要逐行删除	删除速度快	删除速度最快
因此,在不再需要一张表的时候,用drop;
在想删除部分数据行时候,用delete;
在保留表而删除所有数据的时候用truncate。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-02-05 21:48:17  更:2022-02-05 21:48:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 13:36:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码