#3 SQL多表查询

经验:

1,where 和having的区别?

where是用于原始字段的过滤,

having主要用于聚合函数的汇总过滤,虽然这个原始字段也是可以用的,但是不推荐,因为效率比where低

所以尽量少用having,能不用尽量不用(where 能实现的having 都能实现,但是效率低 )

2,count(*)和count(字段名)的差别

第一个会输出全部的行,,而第二个如果遇到为Null的,就不会数出来,

3,还有一个要注意的.如果 我要查询一个   hehe_haha   ,hehe_xixi

这个怎么查询呢?

where name  like ‘hehe[ _ ]%‘

要用这样,因为[  _ ] 这个代表的是一个下划线字符


今天教了挺多数据库的东西,很多都是我不懂得。所以这一章必须要好好学习。。。(PS:那个时候对聚合函数还有一些常用的函数不了解,发出的感慨啊。 )

1,查询

模板:所有的SQL语句,都是按照这个规则来的,顺序也是这样的,我们不能随意变动这个顺序。比如 from放到前面来是不行的。

select 字段名.....

from 表名

where 条件(这里只能是字段名才可以,不可以是别名)

group  by 分组

having 条件

order by 字段名/别名/字段名组合  desc(降序)

取别名的方法:

1,select 别名=原始字段/字段组合/聚合函数 from 表名

2,select 原始字段/字段组合/聚合函数 别名 from 表名

3,select 原始字段/字段组合/聚合函数 as 别名 from 表名(Oracle不能加 AS)

怎么连接两个字段的值,

eg:

select 姓+名 as 姓名 from 基本信息表

然后加可以用,加减乘除都是可以的,(能运算的只有整型)   除了+

SQL关键字:

top:取出查询出来的前几个值/前百分之几的值

用法:     select top 3/top 30 percent * from tablename

between:  从n(小) and m(大)  (范围打击)

not:把这个条件取反

not between :不在..范围内(不单独使用)

in:在这几个值中的一个(定点打击)  where name in(‘hehe‘,‘haha‘....)

distinct:查询的时候,只输出不重复的字段           eg:select distinct Id from tablename

like:模糊查找.(只针对于字符串)

select * from table

where name like ‘hehe%‘

like中有几个通配符:

1,%     代表任意个字符,  >=0    ‘hehe%y‘            与hehe开头,与y结尾

2,_     代表一个字符  ,   =1       ‘h_‘              两个字节

3,[]          代表括号内的一个    =1               [1-9]   1-9中的一个数

4,[^]       代表不在括号内的一个   =1          [^1,^3-9] 不是1,不是3-9中的一个,(如果取反.两个都要加^这个符号,要取反的加)

分组:这个是一个重点,.也是一个难点

格式:

group by 分组

having  聚合函数的过滤

----------------------------------

注意事项:

1,select除了聚合函数外,其他字段都要跟在group by 分组中

2,对聚合函数进行过滤,用having 而不是用where

聚合函数:

1,MAX(字段/字段组合)  ---取最大值

2,MIN(字段/字段组合)  --- 取最小值

3,AVG(字段/字段组合)   ---取平均值

4,SUM(字段/字段组合)               ---求和

5,COUNT(字段/字段组合)          --计算行数

排序

order by 字段名/字段组合  desc(降序,默认升序)

一些关于时间的函数,这个是最麻烦的.也是最难的....

getdate()     获取当前时间 ------>不确定函数,因为每次运行的结果是不一样的

year(time)     返回年

month(time)     返回月

day(time)          返回天数

datediff(类型(返回天(dy)还是年(yy)?),开始时间,结束时间)

convert(转换出来的类型,表达式,类型(看帮组文档))

eg:convert(varchar(10), time,102(这个是YYYY.MM.DD))

datepart(类型,时间)          获取时间的一部分

这个类型可以查帮助文档

#3 SQL多表查询,布布扣,bubuko.com

时间: 2024-10-16 11:01:08

#3 SQL多表查询的相关文章

#4 SQL 多表查询、子查询

今天讲了一个SQL的多表查询和子查询 笔记里面有挺多有用的图片,重要是为了方便了解外连接和内连接,还有自连接等... 这里显示不出来,所以放一个链接, 到有道云笔记去看:http://note.youdao.com/share/?id=90f107b6a6aac379a795373f7f98c6ff&type=note 多表查询和子查询的关系? 多表查询可以做到的,子查询都可以做到,子查询思路比较符合正常人的思路,但是代码稍微长一点 多表查询 |--内部链接查询 : select * from

sql多表查询之一:Where 和 On的秘密

原文 sql多表查询之一:Where 和 On的秘密 对于还在SQL初级阶段的朋友来说,sql多表查询问题是一个比较有趣也容易出错的技术.什么时候会用到sql多表查询呢?是在两张或两张以上表单中通过某几个字段进行互联管理的时候,这就不得不说说sql多表查询中Where 和 On的秘密. 在了解sql多表查询中Where 和 On的秘密之前,让我们先来温习一下连接基础吧 按列a把两表连接,请问各种连接方式的结果的结果? 语法呢? 左    select * from @a Aa left join

SQL联表查询

数据库中最最常用的语法----select.简单的select语法很直白: select column from table where expression: 从((from)存储数据的地方(table)按照(where)一定的条件(expression)查找(select)我要的数据(column); 但是在实际工作中用到的比较多的往往还是多联表查询,所以在这里记下自己学习多联表查询的心得. 首先聊一聊笛卡尔积,这是几乎所有数据库书籍在讲多联表查询时第一个要讲的东西,我等P民也只能是把笛卡尔

SQL联表查询的总结

1.Union UNION 操作符用于合并两个或多个 SELECT 语句的结果集. UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表. 当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行.两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2. 注意:使用UNION时,两张表查询的结果有相同数量的列.列类型相似. 学生表信息(Students): ID Name Age City

Sql Service的艺术(四) SQL多表查询

表的基本连接 SQL的一个重要特性就是能通过JOIN关键词,从多个交叉表中查询.分析数据. 连接表的目的 在关系数据库中,数据表设计的一个重要原则就是要避免冗余性. 减少了冗余信息,节省了数据库存储空间. 简化了数据修改.维护操作. 学习本节需要的数据表: CREATE TABLE TEACHER ( ID INT IDENTITY (1,1) PRIMARY KEY , --主键,自增长 TNO INT NOT NULL, --教工号 TNAME CHAR(10) NOT NULL, --教师

sql 两表查询后 更新某表中部分字段

这是上一个sql更新某表字段的一个延伸,在更新表数据时,实际上会有多表数据查询场景,查询后,只需要更新某一个表中的数据,以下提供两个方法, 第一种使用update 两表查询 update api_manage_apicollectioninfo_copy a, api_manage_apicollectionmanage b set a.header=replace(a.header,'XXXDDD','zhangjun') WHERE a.api_collection_id=b.id and

sql 多表查询结果验证

1.笛卡尔积 定义: 设A,B为集合,用A中元素为第一元素,B中元素为第二元素构成的有序对,所有这样的有序对组成的集合 ,叫做A与B的笛卡尔积,记作AxB. 上面有一个很关键的词为"有序",因此,我们来看一个例子: 例如,A={a,b},B={0,1,2},则 AxB={<a,o>,<a,1>,<a,2>,<b,0>,<b,1>,<b,2>,} BxA={<0,a>,<0,b>,<1,

mysql如何查询多样同样的表/sql分表查询、java项目日志表分表的开发思路/按月分表

之前开发的一个监控系统,数据库的日志表是单表,虽然现在数据还不大并且做了查询sql优化,不过以后数据库的日志表数据肯定会越来越庞大,将会导致查询缓慢,所以把日志表改成分表,日志表可以按时间做水平分表,我是按月分的,每个月一张表,这时候的问题是 数据库有多张同样的分表如何根据条件查询? 在进行分页的时候如何计算总记录数?如何查询出所有分表? 每个月的新表是如何创建?系统如何自动创建? 不确定哪个分表的情况如何查询某一条详细记录? 分表查询分表查询可以用union或者union all进行查询uni

sql学习总结(4)——SQL多表查询技术

4.1笛卡尔积 select 姓名,工资,城市 from 职工,仓库 仓库5条记录,职工表18条记录,结果18*5=90条记录. 职工表18个员工,仓库表5个仓库,即5个职工所在的城市,若要显示职工的姓名.工资及所在城市信息,结果应该为18条记录: select 姓名,工资,城市 from 职工,仓库 where 职工.仓库号=仓库.仓库号 4.2带有运算符的多表查询 显示工资不在1500~2000之间,并且城市为空的职工姓名.工资及所在城市信息: select 姓名,工资,城市, from 职