8. SQL -- 查询,集函数,分组

为了大家更容易理解我举出的SQL语句,本文假定已经建立了一个学生成绩管理数据库,全文均以学生成绩的管理为例来描述。

1.在查询结果中显示列名:

a.用as关键字:select name as ‘姓名‘ from students order by age

b.直接表示:select name ‘姓名‘ from students order by age

2.精确查找:

a.用in限定范围:select * from students where native in (‘湖南‘, ‘四川‘)

b.betweenand:select * from students where age between 20 and 30

c.“=”:select * from students where name = ‘李山‘

d.like:select * from students where name like ‘李%‘ (注意查询条件中有“%”,则说明是部分匹配,而且还有先后信息在里面,即查找以“李”开头的匹配项。所以若查询有“李”的所有对象,应该命令:‘%李%‘;若是第二个字为李,则应为‘_李%‘或‘_李‘或‘_李_‘。)

e.[]匹配检查符:select * from courses where cno like ‘[AC]%‘ (表示或的关系,与"in()"类似,而且"[]"可以表示范围,如:select * from courses where cno like ‘[A-C]%‘)

3.对于时间类型变量的处理

a.smalldatetime:直接按照字符串处理的方式进行处理,例如:
select * from students where birth > = ‘1980-1-1‘ and birth <= ‘1980-12-31‘

4.集函数

a.count()求和,如:select count(*) from students (求学生总人数)

b.avg(列)求平均,如:select avg(mark) from grades where cno=’B2’

c.max(列)和min(列),求最大与最小

5.分组group

常用于统计时,如分组查总数:
select gender,count(sno) 
from students
group by gender
(查看男女学生各有多少)

注意:从哪种角度分组就从哪列"group by"

对于多重分组,只需将分组规则罗列。比如查询各届各专业的男女同学人数,那么分组规则有:届别(grade)、专业(mno)和性别(gender),所以有"group by grade, mno, gender"

select grade, mno, gender, count(*)
from students
group by grade, mno, gender

通常group还和having联用,比如查询1门课以上不及格的学生,则按学号(sno)分类有:

select sno,count(*) from grades 
where mark<60
group by sno
having count(*)>1

6.UNION联合

合并查询结果,如:

SELECT * FROM students
WHERE name like ‘张%’
UNION [ALL]
SELECT * FROM students
WHERE name like ‘李%’

7.多表查询

a.内连接

select g.sno,s.name,c.coursename 
from grades g JOIN students s ON g.sno=s.sno
JOIN courses c ON g.cno=c.cno
(注意可以引用别名)
b.外连接
b1.左连接
select courses.cno,max(coursename),count(sno) 
from courses LEFT JOIN grades ON courses.cno=grades.cno 
group by courses.cno

左连接特点:显示全部左边表中的所有项目,即使其中有些项中的数据未填写完全。

左外连接返回那些存在于左表而右表中却没有的行,再加上内连接的行。

b2.右连接

与左连接类似

b3.全连接

select sno,name,major 
from students FULL JOIN majors ON students.mno=majors.mno

两边表中的内容全部显示

c.自身连接

select c1.cno,c1.coursename,c1.pno,c2.coursename 
from courses c1,courses c2 where c1.pno=c2.cno

采用别名解决问题。

d.交叉连接

select lastname+firstname from lastname CROSS JOIN firstanme

相当于做笛卡儿积

8.嵌套查询

a.用关键字IN,如查询李山的同乡:

select * from students
where native in (select native from students where name=’ 李山’)

b.使用关键字EXIST,比如,下面两句是等价的:

select * from students
where sno in (select sno from grades where cno=’B2’)

select * from students where exists 
(select * from grades where 
grades.sno=students.sno AND cno=’B2’)

9.关于排序order

a.对于排序order,有两种方法:asc升序和desc降序

b.对于排序order,可以按照查询条件中的某项排列,而且这项可用数字表示,如:

select sno,count(*) ,avg(mark) from grades 
group by sno
having avg(mark)>85
order by 3

10.其他

a.对于有空格的识别名称,应该用"[]"括住。

b.对于某列中没有数据的特定查询可以用null判断,如select sno,courseno from grades where mark IS NULL

c.注意区分在嵌套查询中使用的any与all的区别,any相当于逻辑运算“||”而all则相当于逻辑运算“&&”

d.注意在做否定意义的查询是小心进入陷阱:

如,没有选修‘B2’课程的学生 :

select students.*
from students, grades
where students.sno=grades.sno
AND grades.cno <> ’B2’

上面的查询方式是错误的,正确方式见下方:

select * from students
where not exists (select * from grades 
where grades.sno=students.sno AND cno=‘B2‘)

11.关于有难度多重嵌套查询的解决思想:

如,选修了全部课程的学生:

select *
from students
where not exists ( select *
from courses
where NOT EXISTS 
(select *
from grades
where sno=students.sno
AND cno=courses.cno))

最外一重:从学生表中选,排除那些有课没选的。用not exist。由于讨论对象是课程,所以第二重查询从course表中找,排除那些选了课的即可。

添加数据库

use master
go
if exists (select * from sysdatabases where name=‘test‘)
drop database mlnt
go 
create database test  
on
(
name=‘test_data‘,  
filename=‘D:"SQLSERVER2000"MSSQL"Data"test_data.mdf‘,  
size=10mb,
filegrowth=10%

)
log on
(
name=‘test_log‘,
filename=‘D:"SQLSERVER2000"MSSQL"Data"test_log.ldf‘,
size=10mb,
filegrowth=10%
)

sql server 2005 怎么把性别bit 类型的1、0转换成中文男或女显示啊?

select case 性别
       when 1 then ‘男‘
       when 0 then ‘女‘
end as 性别
from tablea

时间: 2024-10-01 05:10:14

8. SQL -- 查询,集函数,分组的相关文章

SQL查询将数据按字段(2017-08-15 11:34:05)进行按月分组

关于进行sql查询按字段me_createTime按月进行排序 使用函数:date_format 按月进行分组查询,并按月进行排序 上代码 $sql="select date_format(me_createTime,'%Y-%m')as create_month,count(me_id) as me_num from {$SETTING['db']['prefix']}member where me_state in(1,2) and sm_id='$sm_id' group by date_

关系数据库SQL之基本数据查询:子查询、分组查询、模糊查询

http://www.jianshu.com/p/eeb6a898d4ec 前言 上一篇关系数据库常用SQL语句语法大全主要是关系型数据库大体结构,本文细说一下关系型数据库查询的SQL语法. SQL数据查询 语法回顾 SELECT [ALL|DISTINCT] <目标列表达式>[,<目标列表达式>]- FROM <表名或视图名>[,<表名或视图名>]- [WHERE <条件表达式>] [GROUP BY <列名> [HAVING &l

SQL查询得到(按编号分组的日期最大的记录)

用SQL查询得到(按编号分组的日期最大的记录) 编号 F1 F2 日期 001 ... ... 2006-01-01 10:25:00 001 ... ... 2006-01-01 10:26:00 002 ... ... 2006-01-01 10:25:00 002 ... ... 2006-01-01 10:26:00 用SQL查询得到(按编号分组的日期最大的记录) 编号 F1 F2 日期 001 ... ... 2006-01-01 10:26:00 002 ... ... 2006-0

SQL group by分组查询

本文导读:在实际SQL应用中,经常需要进行分组聚合,即将查询对象按一定条件分组,然后对每一个组进行聚合分析.创建分组是通过GROUP BY子句实现的.与WHERE子句不同,GROUP BY子句用于归纳信息类型,以汇总相关数据.GROUP BY的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理. 在SQL Server中使用的分组查询是ORDER BY子句,使用ORDER BY子句要同聚合函数配合使用才能完成分组查询,在SELECT查询的字段中如果字段没有使用

python 之 Django框架(orm单表查询、orm多表查询、聚合查询、分组查询、F查询、 Q查询、事务、Django ORM执行原生SQL)

12.329 orm单表查询 import os if __name__ == '__main__': # 指定当前py脚本需要加载的Django项目配置信息 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "orm_demo.settings") import django django.setup() # 启动Django项目 from app01 import models #返回QuerySet对象的方法: r

Django框架08 /聚合查询、分组、F查询和Q查询、执行原生sql、设置 sql_mode

目录 Django框架08 /聚合查询.分组.F查询和Q查询.执行原生sql.设置 sql_mode 1.聚合查询 2.分组 3.F查询和Q查询 4.执行原生sql(了解) 5.展示sql的 6.设置 sql_mode Django框架08 /聚合查询.分组.F查询和Q查询.执行原生sql.设置 sql_mode 1.聚合查询 aggregate(*args, **kwargs) aggregate()是QuerySet 的一个终止子句,意思是说,它返回一个包含一些键值对的字典.键的名称是聚合值

SQL查询操作处理流程

这里看到书上讲述SQL的查询处理,在SQL中查询是通过select语句以及一些辅助的子句来实现需要的输出,这里使用的是mysql,首先,要理解物理表和虚拟表的区别,物理表就是存储在文件系统上的一个或者多个文件,按照相应的存储数据结构将每一行的数据存储,虚拟表是我们在物理表的基础上构建出来的,可能是全部的表结构,也可能是表中的部分字段或者部分行,甚至可能是表中某些字段经过某种运算之后的结果.但是SQL语言不像C/C++/JAVA这类语言一样,它们的主要区别在于SQL给你一个需求,不关心它是怎么实现

【知了堂学习笔记】SQL查询基础语句(单表查询、多表查询)

SQL查询基础 1.单表查询 从数据库中查找数据 专业的称谓又称为投影 基本查询语句结构 select 列 from 表 * 所有列不是所有其他东西 查询所有数据 例:SELECT * FROM t_studen 需要执行比较细的操作  加上条件筛选:查询id为2号的学生信息 SELECT * FROM t_student WHERE id=2; 筛选的执行步骤 例:SELECT * FROM t_student WHERE id=2; SELECT *          (3) 再查询  筛选

【T-SQL进阶】02.理解SQL查询的底层原理

本系列[T-SQL]主要是针对T-SQL的总结. T-SQL基础 [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础]02.联接查询 [T-SQL基础]03.子查询 [T-SQL基础]04.表表达式-上篇 [T-SQL基础]04.表表达式-下篇 [T-SQL基础]05.集合运算 [T-SQL基础]06.透视.逆透视.分组集 [T-SQL基础]07.数据修改 [T-SQL基础]08.事务和并发 [T-SQL基础]09.可编程对象 T-SQL进阶 [T-SQL进阶]01.好用的SQ

在MyEclipse中构建SQL查询语句

在MyEclipse中的Visual SQL查询编辑器可用于轻松创建复杂的SQL语句,同时还无需记住其语法.不仅如此,它还利用易于使用的向导来直观地添加表.创建连接.管理组.表达式以及输出命令等等.在本教程中,您将学习到: 打开Visual SQL查询编辑器 将表添加到查询中并创建连接 构建一个表达式 运行该SQL 持续时间:10分钟 没有MyEclipse?立即下载 1. 打开Visual SQL查询编辑器 这里有几种方法可以用来访问Visual SQL查询编辑器. 1.1 从SQL编辑器中打