sql必知必会(第四版) 学习笔记
还有一个《Sqlserver2008技术内幕》的笔记,也很好!~
http://www.cnblogs.com/liupeng61624/p/4354983.html
温习一遍简单的sql语法,把自己掌握还不够的地方,做了些笔记....
1 去重复关键词,distinct
select distinct sname from student;
2 限制结果top的用法
select top 5 id from student 获取前五条记录
可以利用top来写sql分页语句
3 排序order by
select * from student order by id,name desc;
默认是升序 asc,若是降序要在列名后标明desc
order by语句在sql句尾,在where语句后面出现
4 where
操作符 =,<> !=(不等于),>,>=,<,<=,!(不小于),!>(不大于)
BETWEEN......(在...之间)
is NULL(空值)
AND 条件与
OR 条件或
注意: and的结合优先级高于or,所以where后面多条件时候最好用括号写清楚
5 IN,NOT
select * from student
where id in(1,2,3)
where 条件中的NOT表明否定其后跟的任何条件,也就是筛选的是where条件外的数据
6 通配符匹配过滤
Like...模糊匹配
select * from student
where name like '汪%'
选出汪姓 的同学,其中 % 代表匹配任意次,_ 代表匹配单个字符,[]表示匹配中括号里面的字符
7 as 利用as起别名,简便写法
8 聚合函数
利用一些简单的聚合函数汇总数据
AVG() 计算平均值
Count() 计算 个数
Max() 最大值
Min() 最小值
9 分组数据
select COUNT(*) as 人数, Kind as 科目类型
from Course
Group by Kind
Having的用法,和where的区别就是where是在检索时过滤行的,而Having是用来过滤分组的
如上,在sql句末加上,Having Count(*) > 2 那么就是要筛选出人数大于2的组了
另外一种理解,where是对数据分组前进行过滤,而Having 是对数据分组后进行过滤,where中排出的行就不包括在分组中了,从而影响到Having子句中基于这些值过滤掉的分组。
至此简单回顾下select子句及其顺序
句子 说明 是否必须使用
--------- ----------------- -------------------------
select 要返回的列或者表达式 是
from 从中检索数据的表 仅在从表中选择数据使用
where 行级的过滤 否
group by 分组说明 仅在按组计算聚合时使用
Having 组级过略 否
Order by 输出排序顺序 否
以前一直弄不清,group by,having...一起怎么使用的,现在清楚了许多。
10 子查询
不多说了,就是一级级嵌套查询下去
11 联结表 多表查询
对于关系表而言,那么就是一种数据存放在对应的一张数据表中,避免数据的重复,比如把产品相关信息放在一张Products表中,产品对应的供应商相关信息放在另一张供应商表Vendors中。
如果我们要通过产品查询其对应的供应商Vendor的相关信息,要么使用之前的子查询,这样就过于繁琐,所以我们要使用表的连接查询。
多表的连接有自然连接,通过join来连接的左外连接和右外连接。
12 组合查询
union
select * from StuCou
where StuNo = 1
union
select * from StuCou
where StuNo = 2
等价于
select * from StuCou
where StuNo = 1 or StuNo = 2
13 插入数据
insert [into] Student values('1','King',13,'浙江杭州')
这样的话,就是插入一整行数据,要求插入数据个数和数据表中定义的个数要一致
或者可以这么写
insert into Student(stu_id,stu_name,stu_age,stu_address,stu_score)
values(1,'King',13,'浙江杭州',100);
values中的值和前面的属性一一对应
从一个表复制到另一个表
insert * into class1 from class
那么数据库会新建一个名为class1的数据表然后把class中的数据复制到class1中。
如果你想将class表中的部分新数据导入到class1中的话,那么你可以这么写
insert into class1(列1,列2,列3)
select 列11,列22,列33
from class
但是如果行中有不能为null的属性,就不能这么做了
14 更新和删除数据
update ,delete
update 表名
set 列名 ='值'
where 条件
值得注意的是,更新操作往往会因为,表与表之间的约束关系发生冲突
delete from 表名
where 条件
delete是删除表的内容
若想删除整张表中的内容,那么delete from 表名
更快的删除表中所有行,而且速度更快
truncate Table 这样删除不用记录数据的变动所以删除更快
15 创建表,更新,删除
create table 表名(
列名 数据类型 说明(null/not null),
...
)
更新表
给表增加一列
Alter Table 表名
ADD 列名, 数据类型
Drop Column 列名 --删除一列
删除表
Drop Table 表名
sql必知必会(第四版) 学习笔记的更多相关文章
- 算法第四版学习笔记之优先队列--Priority Queues
软件:DrJava 参考书:算法(第四版) 章节:2.4优先队列(以下截图是算法配套视频所讲内容截图) 1:API 与初级实现 2:堆得定义 3:堆排序 4:事件驱动的仿真 优先队列最重要的操作就是删 ...
- 算法第四版学习笔记之快速排序 QuickSort
软件:DrJava 参考书:算法(第四版) 章节:2.3快速排序(以下截图是算法配套视频所讲内容截图) 1:快速排序 2:
- sql必知必会(第四版) 学习笔记二 视图
本书用到的几个表的建表sql语句如下: --销售产品供应商 CREATE TABLE Vendors ( vend_id varchar(20) not null, vend_name varchar ...
- sql必知必会(第四版) 学习笔记一
温习一遍简单的sql语法,把自己掌握还不够的地方,做了些笔记.... 1 去重复关键词,distinct select distinct sname from student; 2 限制结果top的用 ...
- 算法(第四版)学习笔记之java实现希尔排序
希尔排序思想:使数组中随意间隔为h的元素都是有序的. 希尔排序是插入排序的优化.先对数组局部进行排序,最后再使用插入排序将部分有序的数组排序. 代码例如以下: /** * * @author seab ...
- 算法(第四版)学习笔记之java实现可以动态调整数组大小的栈
下压(LIFO)栈:可以动态调整数组大小的实现 import java.util.Iterator; public class ResizingArrayStack<Item> imple ...
- Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(十四)之Type Information
Runtime type information (RTTI) allow you to discover and use type information while a program is ru ...
- Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(十三)之Strings
Immutable Strings Objects of the String class are immutable. If you examine the JDK documentation fo ...
- Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(十二)之Error Handling with Exceptions
The ideal time to catch an error is at compile time, before you even try to run the program. However ...
随机推荐
- Java基础——数组应用之字符串String类
字符串String的使用 Java字符串就是Unicode字符序列,例如串“Java”就是4个Unicode字符J,a,v,a组成的. Java中没有内置的字符串类型,而是在标准Java类库中提供了一 ...
- Vue.2.0.5-自定义指令
简介 除了默认设置的核心指令( v-model 和 v-show ),Vue 也允许注册自定义指令.注意,在 Vue2.0 里面,代码复用的主要形式和抽象是组件--然而,有的情况下,你仍然需要对纯 D ...
- javascript设计模式学习之四——单例模式,缓存与对象池
单例模式的定义:确保一个实例,并提供全局访问. 惰性单例的定义:只在需要的时候才创建对象. 在开发中,有些对象往往只需要一个,比如线程池.全局缓存.浏览器中的window对象等. java中的单例 关 ...
- Swift游戏实战-跑酷熊猫 11 欢迎进入物理世界
物理模拟是一个奇妙的事情,以此著名的游戏有愤怒的小鸟.我们在这节将会一起来了解如何设置重力,设置物理包围体,碰撞的检测. 要点: 设置物理检测的代理: 让主场景遵循SKPhysicsContactDe ...
- From Disk partition to PostgreSQL installation
From Disk partition to PostgreSQLinstallation [root@compute mnt]# fdisk /dev/sdb Welcome to fdisk (u ...
- 一个新人对JavaScript的内容简单介绍
JavaScript 1.基本的数据类型:字符串 小数 整数 时间日期 布尔型等. 2.变量: JS定义变量通通都是用var开头,var里面可以放任何东西(如:小数,整数,字符串,时间日期等等 ...
- FAQ: C++中定义类的对象:用new和不用new有何区别?
C++用new创建对象和不用new创建对象的区别解析 作者: 字体:[增加 减小] 类型:转载 时间:2013-07-26 我要评论 在C++用new创建对象和不用new创建对象是有区别的,不知你是否 ...
- escape()、encodeURI()、encodeURIComponent() difference
escape() 方法: 采用ISO Latin字符集对指定的字符串进行编码.所有的空格符.标点符号.特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编 ...
- c++之路进阶——codevs4543(普通平衡树)
4543 普通平衡树 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 这是一道水题 顺便祝愿LEZ和ZQQ 省 ...
- linux第7天 I/O的五种模型, select
服务器端避免僵尸进程的方法: 1)通过忽略SIGCHLD信号,解决僵尸进程 signal(SIGCHLD, SIG_IGN) 2)通过wait方法,解决僵尸进程 signal(SIGCHLD, han ...