sql数据库相关语句
易错点
Where需要放在from语句之后;where中不能出现聚合函数(就是能够将几行一列合并为一行一列的函数,比如max,min,avg,count());但是可以出现其他,如比较符,getdate(0之类的哈
2,筛选条件中需要用到聚合函数的话,不能用where子句,此时考虑是否可以采用having,但是having只能够和group by 结合使用,其使用的对象必须是前面select出的参与分组的哪些列
3,group by子句必须放在where子句的后面,并且没有在group by 子句中出现的列是不能够出现在select中的,因此select中的列要么在group by中出现过,要么就是聚合函数,此时聚合函数作用的对象只在分组内部,对表中的列按照分组后的结果进行处理(因为多行聚合为一行之后,只有聚合函数才能同样返回一行的结果)
2,Like,=后的字符串的单引号别忘记了,一看到前几名,后几名,别忘记加上ofrderby,并且这个子句一般是最后一句
4,感觉执行的时候大概是这么一个顺序,先看from的对象,然后查看where子句,然后是groupby,的处理,之后是orderby 的排序,最后才返回select来查
不过书写的顺序
select
from
where
groupby
orderby
或者
select
from
groupby
having
5,要将多个结果集进行合并,使用union或者union all,此时要求列数相等,第一个select定义的是列明,类型相容;查询的结果集来自多个有关联的表采用join on(这些表之间存在类似于外键的概念)
创建和删除表
修改表
主键选择
数据的update
以及In(集合)between and
数据检索(别名)
Select之后有几个字段,得到的结果集就有几个列;如果select 检索不和表关联的字段的时候,相当于计算函数或者表达式的值。
数据汇总
数据排序
通配符过滤
空值处理
SELECT userinfo.id, user_name, role, adm_regionid, IFNULL(region_name,) as region_name, create_time
FROM userinfo
LEFT JOIN region ON userinfo.adm_regionid = region.id
数据分组
Having
取得特定条数
去掉重复数据
distinct
联合结果集;
(联合之后的列名是头一个selsect对应的列名,如果列数不相同,那么只有自己写一个相同类型的数据如上条语句那样给人工补全;此时补全的表达式不在是雷鸣,而是前一个sql语句对应字段下面的取值)
数据库函数
数字函数
字符串函数
如果要去除两边的空格,这么来做
LTRIM(RTRIM(“ aa ”));
日期函数
Hour hh 小时
Second 秒钟
类型转换函数
当然转换的前提是这些类型确实可以转换
空值处理函数
流程函数
几条案例
查询员工的最高最低年龄,得到一个结果表
其中的员工最高最低年龄,并非原来的表中已经具有的列,所以需要注意select语句不仅仅是在已经有的数据中检索,还能有其他用途;如果与表无关联的时候,就是计算表达式或者函数的值作为这一列的值输出(不是列名)
在最后一行加上合计
计算入职的年份;并根据结果进行排序
取出当前日期的年份
取出每一年入职员工的人数
两列声称三个列
Select 单号,
(Case 金额
When 金额>0 then 金额
Else 0
As 收入),
(case 金额
When 金额<0 then 金额
Else 0
As 支出)
From tableName
《这个例子的特点是行数不变,只是将其中原来的一列拆分为两列,并不存在函数的聚合》
计算比赛的胜负场次
select Name,
sum(case Score
when N’胜’ then 1 else 0 )as 胜,
sum(case Score
when N’负’ then 1 else 0 )as 负,
from T_Score
group by Name
综合练习
1, 取得通话时间最长的3条记录
SELECT TOP (3) Id, CallerNumber, TelNumber, StartDateTime, EndTime, DATEDIFF(second, StartDateTime, EndTime)
AS 间隔
FROM T_call
ORDER BY 间隔 DESC
如果不想要多增加一个字段,可以
SELECT TOP (3) Id, CallerNumber, TelNumber, StartDateTime, EndTime,
FROM T_call
ORDER BY DATEDIFF(second, StartDateTime, EndTime) DESC
2, 输出所有数据中拨打长途号码的总时长,like,sum
SELECT SUM(DATEDIFF(second, StartDateTime, EndTime)) AS Expr1
FROM T_call
WHERE (TelNumber LIKE '0%')
3, 输出本月通话总时长最多的前两名话务员的编号以及对应的通话总时
SELECT TOP (2) CallerNumber, SUM(DATEDIFF(second, StartDateTime, EndTime)) AS 间隔
FROM T_call
WHERE (DATEDIFF(month, StartDateTime, GETDATE()) = 0)
GROUP BY CallerNumber
ORDER BY 间隔 DESC
4, 输出本月拨打电话次
5, 数最多的前两名呼叫员的编号
SELECT CallerNumber, COUNT(*) AS 通话次数
FROM T_call
WHERE (DATEDIFF(month, StartDateTime, GETDATE()) = 0)
GROUP BY CallerNumber
ORDER BY 通话次数 DESC
6, 汇总室内通话总时长和长途通话总时长
(挺麻烦的,这里暂时省略,可以参考视频)
索引
多个表之间的查询Join
(这貌似可以解决自己微博与微博报之间多对一的关系,而且在一个表对应的dataset中也可以查询另外的表中的数据)
子查询(子查询最好具有一个别名)
其中vs内置的row_number()函数是对结果集进行从1依次进行编号,但是这是个开窗函数,不能出现在where子句中,只能够在select或者order by中进行使用,因此一般采用子查询
其实上面限制结果集进行分页的查询如果写成这个样子就很容易理解
Select row_number() over(order by Fsalary desc) as rownum,fNumber,FName,FAge from T_employee where rownum>=1 and rownum<=5不过由于上面所说的语法的限制这种格式不能运行,因此套用了子查询
(有这么一条规律,如果select语句from的对象是子查询的话,如果是单个值的子查询,得到的结果只能是单个值,因此一般也不会放在from子句中,如果是多行一列的子查询,相当于一个集合,选择的对象只能是这个集合中的一个,如果是多行多列的子查询,那么就把它看做一张新表来写对应的select语句)
在插入数据的同时希望能够得到插入数据自动生成的id
方法一:可以使用out
方法二:可以使用这个全局变量select @@
sql数据库相关语句的更多相关文章
- SQL数据库相关
数据库相关知识点 SQL, 对表的理解, 对表的主键, 外键的理解, 视图, 为什么要有视图, 视图有什么功能, 视图与表有什么区别 主键是唯一标识的一条记录,不能重复,不能为空. 表的外键是另一个表 ...
- SQL数据库基本语句
SQL特点--> 1)综合统一.SQL是集数据定义.数据操作和数据控制于一体,语言峰峰统一,可独立完成数据库生命周期的所有活动. 2)高度非过程化.SQL语言是高度非过程化语言,当进行数据操作时 ...
- SQL数据库基本操作语句
一.数据库及数据库表定义 1.创建基本表 create table <表名> (<列名><数据类型>[列级完整性约束条件] ...
- SQL 数据库基础语句
一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建备份 ...
- sql数据库常用语句总结
1.增加字段 alter table docdsp add dspcodechar(200)2.删除字段 ALTER TABLE table_NAME DROP COLUMNc ...
- NumberFormatException: Invalid int类型不匹配异常——使用SQL数据库查询语句select * from blacknumber order by _id desc limit ?,20;出现
异常:类型不匹配 05-06 08:12:38.151: E/AndroidRuntime(14904): java.lang.NumberFormatException: Invalid int: ...
- sql数据库监控语句
--查找被阻塞进程 --查找阻塞头进程 and exists ( from master..sysprocesses where blocked =p.spid) --查找等待时间长的进程 order ...
- sql 数据库操作语句 不带select
MySQL数据操作语句 1.总纲 DDL -数据定义语句** create/drop/alter ** create: 创建 drop:删除 alter:修改 DML -数据操作语句 ** inser ...
- Sql数据库收缩 语句特别快
数据库在收缩的时候..使用菜单 >> 任务 >> 收缩 >> 文件 >> 数据, 特别慢..还会报错失败.. 但使用脚本 USE [dbName] G ...
随机推荐
- numpy数组转置与轴变换
numpy数组转置与轴变换 矩阵的转置 >>> import numpy as np >>> arr=np.arange(15).reshape((3,5)) &g ...
- 2017.9.23 C组比赛总结
今天又回到了C组,感觉爽歪歪~分数终于是个三位数了,yes! 第一题,赛车.水!只用一个贪心就可以AC了. first,以速度为关键字小到大qsort一下... scond,枚举每一个赛车,看看它可以 ...
- 分位数回归及其Python源码
分位数回归及其Python源码 天朗气清,惠风和畅.赋闲在家,正宜读书.前人文章,不得其解.代码开源,无人注释.你们不来,我行我上.废话少说,直入主题.o( ̄︶ ̄)o 我们要探测自变量 与因变量 的关 ...
- 搜索专题:问题 E: 挑战ACM迷宫
这是往年校赛的一道题,最开始做这道题的时候还没有系统的学习过搜索,用了C语言学的回溯法尝试,毫无疑问的TLE: 学习了DFS之后,自己的剪枝功力不够,又是TLE,最后学了BFS之后,哇,终于做出来了, ...
- Codeforces 10D LCIS 求最长公共上升子序列及输出这个子序列 dp
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/qq574857122/article/details/34430283 题目链接:点击打开链接 题意 ...
- 解决Asp.Net core 控制台出现乱码的情况
将控制台的编码页修改成Unicode,在运行程序或者在程序里加一行Console.OutputEncoding = Encoding.Unicode; Console.OutputEncoding = ...
- springboot导包spring-boot-starter-parent出现错误
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot ...
- ECharts 中的事件和行为
在 ECharts 的图表中用户的操作将会触发相应的事件.开发者可以监听这些事件,然后通过回调函数做相应的处理,比如跳转到一个地址,或者弹出对话框,或者做数据下钻等等. 如下是一个绑定点击操作的示例. ...
- springboot学习2
项目导入eclipse 先检测是否安装有gradle插件 然后点击 finish 按钮 hello world实例 Application.java package com.example.demo ...
- python子进程模块subprocess详解
subprocess--子进程管理器一.subprocess 模块简介subprocess最早是在2.4版本中引入的.subprocess模块用来生成子进程,并可以通过管道连接它们的输入/输出/错误, ...