数据库部分语句(持续更新)
2017-10-30 19:33
295 查看
最近项目遇到了一些sql代码不是很理解 就贴出来 加上自己的注释
举个例子是 分组语句 :
SELECT hosid AS 医院编号, hosname AS 医院名称, depid AS 科室编号, depname AS 科室名称,
docid AS 医生编号, docname AS 医生姓名, medid AS 药品编号, medname AS 药品名称,
MAX(medspec) AS 药品规格,CONVERT(int,AVG(medprice)) AS 药品单价, MAX(medcategory) AS 药品类别,
CONVERT(int,SUM(amount)) AS 用药数量, CONVERT(int,SUM(amount) * AVG(medprice)) AS 药品总价,
DATENAME(Month,MAX(use_date)) AS 月份
FROM dbo.MedUse
WHERE use_date = ‘2017.10.1’ and hosname = ‘南阳二院’ and depname = ‘血液肿瘤科’ and docname = ‘邹乐乐’ and medname = ‘脂肪乳针(中长链C8-24)’
GROUP BY hosid,depid,docid,medid,hosname,depname,docname,medname //这8个列同时一样的时候为一组
ORDER BY depid,depname,docname //按升序排序 如果第一个列相等就看第二个,依次来看
MAX 之前的都是要排序的字段 as后面的是用来代替as前面显示在列表中的列值 max是挑出里面值最大的那个数 CONVERT是对数值的操作
如CONVERT(int,AVG(medprice))是 求平均值并转化为int型 CONVERT(int,SUM(amount))是求和并转化为int型 DATENAME(Month,MAX(use_date))是日期转化
然后每一组里面就一行相当于创建了一个新行 因为有MAX这个函数 假设这一组有3行
然后 每个操作都是对列来说的 比如 两个MAX 就是分别求这两列的最大值 然后保存到新的一行里面来
MessageBox.Show(DY.Rows[0][0].ToString()); datatable的第一行第一列不是列的名称!
筛选语句不只from一个表 而是多个表并且有多个条件:
select hospital.name,department.name from hospital,department,doctor where doctor.name=’张海平’
and doctor.depId=department.id and department.hosId=hospital.id
这个sql语句也是比较重要的 from三个表 得到的数据的列是三个表的列之和 首先把doctor.name=’张海平’的行全部列出来
然后 在那些行的基础上除去不是doctor.depId=department.id 的行 然后再在此基础上除去不是 department.hosId=hospital.id 的行
把满足条件的行列出来 列是全部三个表的列之和 列名字重叠无所谓
举个例子是 分组语句 :
SELECT hosid AS 医院编号, hosname AS 医院名称, depid AS 科室编号, depname AS 科室名称,
docid AS 医生编号, docname AS 医生姓名, medid AS 药品编号, medname AS 药品名称,
MAX(medspec) AS 药品规格,CONVERT(int,AVG(medprice)) AS 药品单价, MAX(medcategory) AS 药品类别,
CONVERT(int,SUM(amount)) AS 用药数量, CONVERT(int,SUM(amount) * AVG(medprice)) AS 药品总价,
DATENAME(Month,MAX(use_date)) AS 月份
FROM dbo.MedUse
WHERE use_date = ‘2017.10.1’ and hosname = ‘南阳二院’ and depname = ‘血液肿瘤科’ and docname = ‘邹乐乐’ and medname = ‘脂肪乳针(中长链C8-24)’
GROUP BY hosid,depid,docid,medid,hosname,depname,docname,medname //这8个列同时一样的时候为一组
ORDER BY depid,depname,docname //按升序排序 如果第一个列相等就看第二个,依次来看
MAX 之前的都是要排序的字段 as后面的是用来代替as前面显示在列表中的列值 max是挑出里面值最大的那个数 CONVERT是对数值的操作
如CONVERT(int,AVG(medprice))是 求平均值并转化为int型 CONVERT(int,SUM(amount))是求和并转化为int型 DATENAME(Month,MAX(use_date))是日期转化
然后每一组里面就一行相当于创建了一个新行 因为有MAX这个函数 假设这一组有3行
然后 每个操作都是对列来说的 比如 两个MAX 就是分别求这两列的最大值 然后保存到新的一行里面来
MessageBox.Show(DY.Rows[0][0].ToString()); datatable的第一行第一列不是列的名称!
筛选语句不只from一个表 而是多个表并且有多个条件:
select hospital.name,department.name from hospital,department,doctor where doctor.name=’张海平’
and doctor.depId=department.id and department.hosId=hospital.id
这个sql语句也是比较重要的 from三个表 得到的数据的列是三个表的列之和 首先把doctor.name=’张海平’的行全部列出来
然后 在那些行的基础上除去不是doctor.depId=department.id 的行 然后再在此基础上除去不是 department.hosId=hospital.id 的行
把满足条件的行列出来 列是全部三个表的列之和 列名字重叠无所谓
相关文章推荐
- 数据库更新字段部分内容的语句
- 数据库-oracle常用SQL语句整理(持续更新中)
- zend framework 中使用dbadapter操作数据库的几种方法(持续更新)
- Android开源项目发现--- 工具类数据库ORM篇(持续更新)
- IntelliJ IDEA 2016.3.5 基础配置及部分问题(持续更新中...)
- Oracle 执行简单的更新插入语句,执行一直持续,无法成功
- 一条sql语句(关于将一个表里的数据汇总,更新数据库中的另外一张表的列值
- 简单数据库表基本设计-----持续更新吧
- 【数据库优化(持续更新)】--第一弹设计优化
- SQL语句常见问题的总结(持续更新)
- 只更新数据库部分字段数据的方法
- Mybatis作为持久层更新数据库只能更新部分字段
- Oracle常用语句集合-持续更新...
- ORACLE数据库常用函数学习笔记(持续更新...)
- 文字检测与识别数据库整理【持续更新】
- 非关系型数据库-持续更新
- hadoop 部分学习课程 持续更新
- 多种数据库复制功能语句比较(不断更新)
- SQL Server 2000 一些有用的SQL语句搜集整理(持续更新 )
- 数据库复杂查询,左联右联 聚合 计数 时间查询等,持续更新