‘壹’ 只会sql能做大数据吗
只会sql能做大数据。大数据应用开发岗位需要的知识结构包括大数据平台体系结构、编程语言、数据库NoSQL、算法设计等内容可见在大数据应用开发岗位需要掌握SQL,NoSQL的意思是NotonlySQL,不仅仅是SQL,不是说不需要SQL。对于应用程序开发人员来说掌握SQL是基本的要求。
sql数据分析
在数据分析过程中,数据预处理是最重要也最复杂的环节。懂得SQL编程语句的专业人员能够在数据分析过程中做相应的处理工作,包括数据连接、过滤属性构造、分类汇总、去重排序等等。但现在即使不会做SQL,也洞前可清颤悔以应用超级数据处理算子功能答正帮助普通人员在无需掌握SQL语句的前提下,通过可视化操作无需编码就可以进行数据处理大大提高数据处理的效率。
‘贰’ SQL进阶 1-2 自连接的用法
1.针对相同的表进行连接的技术称为自连接。
2.集合是SQL能处理唯一的数据结构。
3.自连接的性能开销很大(特别是与非等值连接结合使用的时候,用于自连接的列推荐使用主键或者相关列上建立索引)。
select p1.name as name_1, p2.name as name_2 from Procts p1, Procts p2
where p1.name >= p2.name
方法一:窗口函数
select district, name, price, rank() over (partition by distinct order by price DESC) as rank_1
from DistrictProcts;
partitition by 具体将表分割李让成若干个小的子集的作用。因为本题以地区作为分割条件,所以指定distinct列。
方哪丛局法二:标量子查询
select p1.district, p1.name, p1.price,
(select count(p2.price) from DistrictProcts p2
where p1.district = p2.district --在同一个地区内进行比较
and p2.price > p1.price) + 1 as rank_1
from DistrictProcts p1;
方法三:自连接
select p1.district, p1.name, max(p1.price) as price, count(p2.name)+1 as rank_1
from DistrictProcts p1 left outer join DistrictProcts p2
on p1.district = p2.district
and p1.price < p2.price
group by p1.district,p1.name
UPDATE DistrictProcts2 P1
SET ranking = (SELECT COUNT(P2.price) + 1
FROM DistrictProcts2 P2
WHERE P1.district = P2.district
AND P2.price >郑明 P1.price);
方法一:在update语句的set子句中加入计算位次的逻辑
update DistrictProcts1 p1 set ranking = (select count(p2.price) + 1 from DistrictProcts2 p2
where p1.district = p2.district and p2.price > p1.price )
方法二:窗口函数
update DistrictProcts2 set ranking = rank() over(partition by district order by price desc)
‘叁’ 有推荐的SQL进阶书籍或者网站吗(sql数据库入门书籍推荐)
前段时间开始自学数据库,学了一段时间下来,看了好几本书了,品味一下,有几本感觉对刚接触数据库(甚至是数据库高手)的兄弟们来说是相当不虚粗错的所以向大家推荐一下:
一:《数据库设计与开发》
英文名:databasedesignanddevelopment---avisualapproach
清华大学出版社
一本很实用的书籍,图文并茂,讲解生动,让你在不知不觉中已经对数据库的设计产生了兴趣,看完本书后,也许你会感叹,原来数据库设计还是挺简单的哦
二:《SQLServer数据库设计与系统开发教程》
清华大学出版社唐红亮主编
这本书虽说没什么牛逼的头衔,但是绝对是一本不错的教材,全书用两个实际的项目来诠释SQL的各个知识点,语言通俗,但基本知识点都讲得很清楚。作者娓差贺镇娓道来,一点点的将知识深入进去。很不错的一种写法,强烈推荐你看这本书
三:《SQL语言与数据库操作技术大全》
电子工业出版社马军李玉林等编着
这本书我建议大家做SQL语言的字典用,比如要查询、更改、删除数据了,却突然忘了某个子句(如Having子句)的具体用法,这里面会很准确的告诉你。当然,对于专门学习SQL语言的来说,我觉得这本书也是相当不错的选择
四:《SQLServer2005数据库管理入门经典》
清华大学出版社DanWoodChrisLeiterPaulTurley着马振晗等译
对MSSQLServer2005里面的各种工具、组件的功能做了介绍,本书主要适合管理人员看
说明:虽然我也是一名数据库新手,但我拍大希望能通过这样一种方式来帮州我能帮助的人,让他们在学习的初期就不走弯路,给他们一点实实在在的建议。以后我发现的好书我还会持续的发上来,供大家参考。
‘肆’ SQL进阶教程
网络网盘地址:https://pan..com/s/1cZIHvO43AJRhaXDxmCfaMg
解压码:rzy2
封面图片
‘伍’ 只会简单sql,可以当DBA吗
不可以当DBA的。
DBA的要求是很多的,既要了解操作系统,又要了解数据库的存储原理,还要设计数据库、存储、备份、还原、监控等等众多方案。
延伸:什么是DBA
数据库管理员,英文是Database Administrator,简称DBA。这个职位对不同的人意味着不同的意义。只要涉及到数据库(有多少不涉及数据库的应用软件呢?数据库是商业的灵魂和大脑),就需要确定是否雇佣一个或几个DBA。对于企业内部这个职位的定义或者对于那些未来的DBA将是至关重要的。
DBA的一些职责:
安装和升级数据库服务器(如Oracle、Microsoft SQL server),以及应用程序工具。
数据库设计系统存储方案,并制定未来的存储需求计划。
DBA来创建数据库存储结构(tablespaces)。
DBA来创建数据库对象(tables,views,indexes)。
根据开发人员的反馈信息,必要的时候,修改数据库的结构。
登记数据库的用户,维护数据库的安全性。
保证数据库的使用符合知识产权相关法规。
控制和监控用户对数据库的存取访问。
监控和优化数据库的性能。
制定数据库备份计划,灾难出现时对数据库信息进行恢复
维护适当介质上的存档或者备份数据
备份和恢复数据库
联系数据库系统的生产厂商,跟踪技术信息。
‘陆’ 怎么学习SQL语句
创建数据库
创建之前判断该数据库是否存在 if exists (select * from sysdatabases where name='databaseName') drop database 'databaseName' go Create DATABASE database-name
删除数据库
drop database dbname
备份sql server
--- 创建 备份数据的 device USE master EXEC sp_admpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat' --- 开始 备份 BACKUP DATABASE pubs TO testBack
创建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) 根据已有的表创建新表: A:create table tab_new like tab_old (使用旧表创建新表) B:create table tab_new as select col1,col2… from tab_old definition only
删除新表
drop table tabname
增加一个列
Alter table tabname add column col type 注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
添加主键
Alter table tabname add primary key(col) 说明:删除主键: Alter table tabname drop primary key(col)
创建索引
create [unique] index idxname on tabname(col….) 删除索引:drop index idxname on tabname 注:索引是不可更改的,想更改必须删除重新建。
创建视图
create view viewname as select statement 删除视图:drop view viewname
几个简单的基本的sql语句
选择:select * from table1 where 范围 插入:insert into table1(field1,field2) values(value1,value2) 删除:delete from table1 where 范围 更新:update table1 set field1=value1 where 范围 查找:select * from table1 where field1 like ’%value1%’ (所有包含‘value1’这个模式的字符串)---like的语法很精妙,查资料! 排序:select * from table1 order by field1,field2 [desc] 总数:select count(*) as totalcount from table1 求和:select sum(field1) as sumvalue from table1 平均:select avg(field1) as avgvalue from table1 最大:select max(field1) as maxvalue from table1 最小:select min(field1) as minvalue from table1[separator]
几个高级查询运算词
A: UNION 运算符 UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。 B: EXCEPT 运算符 EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。 C: INTERSECT 运算符 INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。 注:使用运算词的几个查询结果行必须是一致的。
使用外连接
A、left outer join: 左外连接(左连接):结果集既包括连接表的匹配行,也包括左连接表的所有行。 SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c B:right outer join: 右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。 C:full outer join: 全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
‘柒’ 怎么进阶自己的sql
多练自然熟
‘捌’ 如何学好SQL只想熟练操作,请指教一些入门的窍门
首先理解关系型数据库的概念
熟悉常用对象和他们的定义语法,如数据库,表,视图,存储过程,触发器,函数等
熟悉常用语句,如SELECT,INSERT,UPDATE等
熟悉常用逻辑判断方法,如IF,CASE WHEN等
熟悉常用内置函数,如CONVERT,GETDATE等
做一部分练习题和应用题,网上或者书本里会有,掌握应用知识
结合Java,C#,PHP等语言做应用,了解他们与SQL之间结合使用的知识。
多练习,多提问,经验丰富后找一些成熟的项目或商业版本学习。
‘玖’ 怎样学习sql
先入门:找一本入门的书,多操作,(首先肯定自己要装个数据库)多练习,可以先看书上的例子!
等到熟练以后可以看一些深一点的书籍,记住要多练习
‘拾’ MYSQL使用基础、进阶分享
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,属于Oracle旗下产品,是最流行的关系型数据库管理系统之一。
端口是3306。
表很多时,使用linux脚本,需要根据需要修改一下:
和创建一样,可以加上 if exists
可两篇文章:
如:
用于在已有的表中添加、删除或修改列。
添加 ADD
或
默认是添加到最后,但可以指定位置。 FIRST :添加最前
AFTER 字段名> :添加指定字段之后
例子:
删除 DROP
修改 MODIFY 主要修改原列的类型或约束条件 同样可以用 FIRST 和 AFTER 字段名> ,代表的是修改到哪里。
修改字段名 CHANGE
可以把表2的数据复制到表1中,但 不能复制约束性条件 。
单行
多行,注意 只有一个VALUES :
不写 (行1, 行2...) 这一部分的话,默认一一对应
除了以上方法外,还可以用SET为每一行附上相应的值。
假如没有筛选的话,就给全部都修改了。可以用 WHERE 筛选。
假如 没有筛选的话,就给全部删除了 。相当于清空。
清空
先把表删除,然后再建一个。与 DELETE FROM 相比, TRUNCATE 的效率更快,因为 DELETE FROM 是把记录逐条删除的。
查询执行的顺序
FROM --> WHERE --> SELECT --> GROUP BY --> HAVING --> ORDER BY --> LIMIT
注意
当数据很大,上百万的时候,使用LIMIT ... OFFSET ..的方式进行分页十分浪费资源且耗时长。最好是结合WHERE使用,如:
REGEXP 使用正则表达进行匹配。 查询时,需要搭配WHERE或HAVING使用 。
两个表之间有交集且要用到两个表的数据时,可以使用内连接查询。
LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。
用法:
RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。 把LEFT JOIN的表1、表2调换顺序,就是REGHT JOIN 。
FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行. 相当于结合了 LEFT JOIN 和 RIGHT JOIN 的结果。
但 MySQL中不支持 FULL OUTER JOIN 。
即SELECT嵌套。
IN 一个查询结果作为另一个查询的条件。 如:
EXISTS 用于判断查询子句是否有记录,如果有一条或多条记录存在返回 True,否则返回 False。True时执行。 如:
索引的本质是一种排好序的数据结构。利用索引可以提高查询速度。
常见的索引有:
MySQL通过外键约束来保证表与表之间的数据的完整性和准确性。 外键的使用条件:
外键的好处:可以使得两张表关联,保证数据的一致性和实现一些级联操作。
对已有的两个表增加外键 比如:主表为A,子表为B,外键为aid,外键约束名字为a_fk_b
为子表添加一个字段,当做外键
为子表添加外键约束条件
假如删除记录报错: [Err] 1451 -Cannot deleteorupdatea parent row: aforeignkeyconstraintfails (...)
这是因为MySQL中设置了foreign key关联,造成无法更新或删除数据。可以通过设置 FOREIGN_KEY_CHECKS 变量来避免这种情况。 第一步:禁用外键约束,我们可以使用: SETFOREIGN_KEY_CHECKS=0; 第二步:删除数据 第三步:启动外键约束,我们可以使用: SETFOREIGN_KEY_CHECKS=1; 查看当前FOREIGN_KEY_CHECKS的值,可用如下命令: SELECT @@FOREIGN_KEY_CHECKS;
使用 UNION 来组合两个查询,如果第一个查询返回 M 行,第二个查询返回 N 行,那么组合查询的结果一般为 M+N 行。
每个查询必须包含相同的列、表达式和聚集函数。
默认会去除相同行,如果需要 保留 相同行,使用 UNION ALL 。
只能包含一个 ORDER BY 子句,并且必须位于语句的最后 。
内置函数很多, 见: MySQL 函数
我们一般使用 START TRANSACTION 或 BEGIN 开启事务, COMMIT 提交事务中的命令, SAVEPOINT : 相当于设置一个还原点, ROLLBACK TO : 回滚到某个还原点下
一般的使用格式如下:
开启事务时, 默认加锁
根据类型可分为共享锁(SHARED LOCK)和排他锁(EXCLUSIVE LOCK)或者叫读锁(READ LOCK)和写锁(WRITE LOCK)。
根据粒度划分又分表锁和行锁。表锁由数据库服务器实现,行锁由存储引擎实现。
除此之外,我们可以显示加锁
加锁时, 如果没有索引,会锁表,如果加了索引,就会锁行
InnoDB默认支持行锁,获取锁是分步的,并不是一次性获取所有的锁,因此在锁竞争的时候就会出现死锁的情况
解决方法:
即ACID特性:
由于并发事务会引发上面这些问题, 我们可以设置事务的隔离级别解决上面的问题.
MySQL的默认隔离级别(可重复读)
查看当前会话隔离级别
方式1
方式2
设置隔离级别
主从集群的示意图如下:
主要涉及三个线程: binlog 线程、 I/O 线程和 SQL 线程。
同步流程:
由于MySQL主从集群只会从主节点同步到从节点, 不会反过来同步, 所以需要读写分离
读写分离需要在业务层面实现 , 写数据只能在主节点上完成, 而读数据可以在主节点或从节点上完成
索引是帮助MySQL高效获取数据的排好序的数据结构
MySQL的索引有
推荐两个在线工具:
简单来说, B树是在红黑树(一个平衡二叉树)的基础上将一个节点存放多个值, 实现的, 降低了树的高度, 每个节点都存放索引及对应数据指针, 同一层的节点是递增的
而B+树在B树的基础上进行优化, 非叶子节点存放 子节点的开始的索引, 叶子节点存放索引和数据的指针, 且叶子节点之间有双向的指针
如下示意图:
不同的引擎, 主键索引存放的数据也不一样, 比如常见的 MyISAM 和 InnoDB
MyISAM 的B+树叶子节点存放表数据的指针, InnoDB 的B+树叶子节点存放处主键外的数据
其他的:
即多个列组成一个索引, 语法:
由于联合索引的B+树的结构, 根据列建立, 所以我们的查找条件也要根据索引列的顺序( where column1=x, column2=y,columnN... ), 否则会全表扫描
如果你对列进行了 (+,-,*,/,!) , 那么都将不会走索引。
OR 引起的索引失效
OR 导致索引是在特定情况下的,并不是所有的 OR 都是使索引失效,如果OR连接的是 同 一个字段,那么索引 不会失效 , 反之索引失效 。
这个我相信大家都明白,模糊搜索如果你前缀也进行模糊搜索,那么不会走索引。
这两种用法,也将使索引失效。另 IN 会走索引,但是当IN的取值范围较大时会导致索引失效,走全表扫描, 见: MySQL中使用IN会不会走索引
不走索引。
走索引。
所以设计表的时候, 建议不可为空, 而是将默认值设置为 "" ( NOT NULL DEFAULT "" )