SQL基本操作(工作中够用了)
以下文章内容都是我自己从平时学习SQL语言时整理而来,写这篇文章是希望我或大家在使用能更方便的查询。
如果有不完整或不正确的地方请大家指出~谢谢大家
基本SQL操作
创建数据库
CREATE DATABASE DB_name
插入数据
INSERT INTO DB_name
VALUE{value1,value2}
更新数据
UPDATE table_name
SET Age=11
WHERE ID='123'
Alter
Alter 是不对表格本身内容修改的,对表格框架修改。
ALTER table_name
ADD state VARCHAR(2) #增添新列
ALTER table_name
DROP COLUMN state #删除列
ALTER table_name
MODIFY id INT #把id列改成数字类型
ALTER table_name #修改列名
CHANGE 'id' 'student_id' VARCHAR(5)
逻辑运算符
1.LIKE
WHERE url LIKE '%google%' #字符串匹配,在url中寻找中间字符串为google的url,%代表0或多个字符
2.IN
WHERE id IN (1001,1002) #表示寻找id为1001,1002的行
3.NOT
NOT 与 LIKE IN连用,表示否定
键
主键(PK): 表中唯一的一列,这一列中不可重复。 标志列。
外键(FK):外键是另一个表的主键
注意:两个表就是通过主外键进行连接。
JOIN
1. 多表链接:
INNER JOIN:
FROM A
JOIN B
ON A.FK =B.PK #合集包括A、B表单共有的
LEFT JOIN:
FROM A
LEFT JOIN B
ON A.FK =B.PK #合集只包括A、B表单共有的,和A表中没在B中匹配到的行
RIGHT JOIN:
FROM A
RIGHT JOIN B
ON A.FK =B.PK #合集只包括A、B表单共有的,和B表中没在A中匹配到的行
Union:
竖向连接两张表,两张表的列数必须相同。
2. 别名:
FROM tablename AS t1
JOIN tablename2 AS t2 # AS可省略
3. 外连接 OUTER JOIN = FULL OUTER JOIN :
外连接,它将返回内连接的结果,以及被连接的表格中没有匹配的行。
4. ON子句
ON A.FK=B.PK #A表的外键和B表的主键
聚合函数
NULL
NULL是一种数据类型,表示 SQL 中没有数据;
查询时:WNERE name IS NULL #查询name为NULL值的行COUNT()
COUNT(*) #一行记录中只要一列有数据,则计数
COUNT(COLUMN_name) #空值不计数SUM()
sum(col_name) #垂直聚合,只对数值进行计算总和,SUM 将忽略 NULL 值,当做0处理MAX() MIN()
MAX() #返回最大值
MIN() #返回最小值
它们都可以用在非数字列上。MIN 将返回最小的数字、最早的日期或按字母表排序的最之前的非数字值,具体取决于列类型AVG()
AVG() #返回平均值,只对值列;忽略分子和分母中的 NULL 值;
GROUP BY函数
GROUP BY() #在使用聚合函数时,对关键列进行分组;如果SELECT语句中有字段没进行聚合,则必须写入GROUP BY函数
GROUP BY 始终在 WHERE 和 ORDER BY 之间
DISTINCT函数
DISTINCT 看做仅返回特定列的唯一值的函数 ?后面的行会怎么出现
HAVING()
HAVING SUN(money)>10000 # 过滤聚集列,当筛选条件有聚合函数时,用HAVING
日期时间函数
DATE_TRUNC:SELECT DATE_TRUNC('month',DATE) (如果数据2015.01~2017.12,行会把每年的每月都列出来) 使你能够将日期截取到日期时间列的特定部分。常见的截取依据包括日期、月份 和 年份。
DATE_PART: SELECT DATE_PART('month',DATE) (如果数据2015.012017.12,行只会列出0112个月份,但每个月份是包含所有年的)可以用来获取日期的特定部分,但是注意获取 month 或 dow 意味着无法让年份按顺序排列。而是按照特定的部分分组,无论它们属于哪个年份。
CASE 语句
CASE WHEN condition THEN result #进行条件选择,分情况生成新列
ELSE result END ;
注意:
1) CASE 语句始终位于 SELECT 条件中。
2) CASE 必须包含以下几个部分:WHEN、THEN 和 END。ELSE 是可选组成部分,用来包含不符合上述任一 CASE 条件的情况。
3)你可以在 WHEN 和 THEN 之间使用任何条件运算符编写任何条件语句(例如 WHERE),包括使用 AND 和 OR 连接多个条件语句。
4)你可以再次包含多个 WHEN 语句以及 ELSE 语句,以便处理任何未处理的条件。
总体顺序:
SELECT
CASE WHEN condition THEN result
ELSE result END ;
FROM
JOIN
ON
WHERE
GROUP BY
HAVING #有WHERE时不需要用HAVING
ORDER BY
LIMIT
高级SQL语句
子查询
就是查询语句嵌套查询语句
格式
SELECT *
FROM (SELECT id,channel, COUNT(*) as events
FROM web_events
GROUP BY 1,2
ORDER BY 3 DESC) sub
GROUP BY channel
ORDER BY 2 DESC;
注意:在条件语句中编写子查询时,不能包含别名。
WITH语句
把要嵌套的查询语句先定义在开头,后面直接带入
WITH table1_name AS (SELECT *
FROM 1 ),
table2_name AS (SELECT *
FROM 2)
SELECT *
FROM table1
JOIN table2
ON table1.id=table2.id
注意:在使用 WITH 创建多个表格时,需要在每个表格后面加一个逗号,但是在引向最终查询的最后一个表格后面不需添加
SQL数据清理
1.清理和重新整理混乱的数据。
LEFT(): left函数可以从字符串左侧输出一定数量的字符 。
RIGHT(): right函数则是从右侧 。
LENGTH(): 获取字符串的长度。
POSITION():获取字符和列,并提供该字符在每行的索引。第一个位置的索引在 SQL 中是1
例:POSITION(',' IN city_state) 获取逗号的索引。STRPOS(): 和 POSITION 提供的结果相同,但是语法不太一样.
例:STRPOS(city_state, ‘,’)LOWER(): 把字符串全变成小写
UPPER(): 把字符串全变成大写
CONCAT(first_name, ' ', last_name):拼接两列字符串。
或者使用双竖线:first_name || ' ' || last_name, 也可以达到相同效果。
注意:POSITION 和 STRPOS 都区分大小写,因此查找 A 的位置与查找 a 的结果不同。
2.将列转换为不同的数据类型。
TO_DATE:将英文月份改成数字,DATE_PART('month', TO_DATE(month, 'month'))
例:将'JULY' 改成 '6'CAST(): 将拼接成的字符串'2014-9-19' 变成时间类型'2014-09-19'.
:: :两个冒号是对数据列转变数据类型。
例 age::INT,将age字符串类型转换成数字类型
3.处理 NULL 的技巧
- COALESCE():COALESCE来处理NULL值,COALESCE('name','0')把name列中空值变成0
这样 COUNT()、AVGAGE()函数就可以包含其计算。
SQL基本操作(工作中够用了)的更多相关文章
- 收集一些工作中常用的经典SQL语句
作为一枚程序员来说和数据库打交道是不可避免的,现收集一下工作中常用的SQL语句,希望能给大家带来一些帮助,当然不全面,欢迎补充! 1.执行插入语句,获取自动生成的递增的ID值 INSERT INTO ...
- 工作中 sql 整理(一)
这篇文章记录关于SQL的内容,有些凌乱,是工作中点滴的积累,只能按照时间顺序,逐次记录. 一.update 关联更新 1.需求 Table A TableB A表中的主键和B表中的主键相关联,关联 ...
- 一、SQL应用(工作中遇到的根据表的某列的值不同,采用的不同列关联表)
一.工作总结: 今天工作中遇到了这样一个需求,具体是根据某张表的某一列值得不同,进行不同关联操作.起初自己的想法是采用UNION操作,把两种情况连接起来,但是会出现一个问题,当进行动态传值SQL拼接的 ...
- 【 PostgreSQL】工作中常用SQL语句干货
接触gp数据库近一年的时间,语法上和其他数据库还是有些许不同,工作中常用的操作语句分享给大家! -- 建表语句 create table ods.ods_b_bill_m ( acct_month t ...
- 工作中遇到的99%SQL优化,这里都能给你解决方案
前几篇文章介绍了mysql的底层数据结构和mysql优化的神器explain.后台有些朋友说小强只介绍概念,平时使用还是一脸懵,强烈要求小强来一篇实战sql优化,经过周末两天的整理和总结,sql优化实 ...
- 工作中SQL语句的优化
在我们的工作中,数据是很多的,这是我常见问题遇到的问题做了简短总结. 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 w ...
- 随机记录工作中常见的sql用法错误(一)
没事开始写博客,留下以前工作中常用的笔记,内容不全或者需要补充的可以留言,我只写我常用的. 网上很多类似动软生成器的小工具,这类工具虽然在表关系复杂的时候没什么软用,但是在一些简单的表结构关系还是很方 ...
- 个人工作记录---工作中遇到的sql查询语句解析
在工作中写了人生的第一个查询语句,虽然是在原有基础上改的,但仍然学到了不少知识 代码: select distinct m.id, (select z.jianc from model_zuzjg z ...
- 分享工作中遇到的问题积累经验 事务日志太大导致insert不进数据
分享工作中遇到的问题积累经验 事务日志太大导致insert不进数据 今天开发找我,说数据库insert不进数据,叫我看一下 他发了一个截图给我 然后我登录上服务器,发现了可疑的地方,而且这个数据库之前 ...
随机推荐
- 关于easyui展示慢的Debug
同事开发的软件系统采用Easyui做的前台界面,当业务变得比较复杂之后,展示效果就变得很慢,于是我开始了原因的排查,现在已经找到了具体的原因,所以拿出来与大家一起分享调试过程. 既然调试的是前端,那么 ...
- 调用阿里云API 的demo示例(java/python)
Java 示例 // 创建DefaultAcsClient实例并初始化 DefaultProfile profile = DefaultProfile.getProfile(vo.getAliRegi ...
- Exp4 恶意代码分析 20164323段钊阳
网络对抗技术 20164323 Exp4 恶意代码分析 1.如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些,用什么方法来监控. ...
- 微信浏览器禁止app下载链接的两种处理方法
最近替朋友放一个微信下载链接,通过二维码扫描下载. 通过扫描二维码下载APP已成为一个非常方便的方式,微信也成为扫描二维码重要的工具,但是扫描后微信浏览器会对APK和appStore的链接进行屏蔽,导 ...
- “全栈2019”Java第一百零四章:匿名内部类与外部成员互访详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- vue + ElementUI 表格筛选框的高度设置,超出一定高度,显示滚动条
相信有很多小伙伴遇到过这个问题,首先还是来看图片,筛选框我做了处理,所以和官网的有点小差别 官方网站和个人网站对比图如下: 代码如下:(F12找到该元素的class,设置高度) .el-table-f ...
- [转]CocoaPods安装和使用教程
[转载自:http://code4app.com/article/cocoapods-install-usage] 目录 CocoaPods是什么? 如何下载和安装CocoaPods? 如何使用Coc ...
- 在Eclipse之中调试FastDFS-storage
FDFS版本为5.03 1.首先在eclipse之中创建一个C/C++工程,取名为FastDFS_v5.03 2.将FastDFS源码解压后拷贝到新创建的工程目录下,然后在ecipse之中刷新下工程就 ...
- Springmvc之表单验证
1.需要的相关jar 这里采用的是hibernate-validator-5.2.4.Final 和validation-api-1.1.0.Final 两个jar包.Hibernate Valida ...
- day1: python3.5学习
1. 基础知识 变量:用于存储信息,方便后面的调用 常量:python中是没有常量这一概念的,若想定义一个常量,需要将变量名大写 举例:name = "Helen" #定义一个 ...