第二章 sql语言基础 查询与操作数据
联接查询 通过使用联接查询,可以根据各个数据表之间的逻辑关系从两个或多个数据表中检索数据
定义数据表之间的关联方式 1>在数据表中指定用于联接的字段,典型的联接条件是在一个数据表中指定外键,同时在另一个表中指定与其
关联的主键 2> 在select语句中指定比较各字段值时要使用的逻辑运算符
联接的类型
内连接
格式: 数据表1 inner join 数据表2 on 联接表达式
指定返回两个表中所有匹配的行.inner是缺省的连接方式
select * from 员工数据表 inner join 项目数据表 on 员工数据表.员工编号=项目数据表.负责人
完整外连接
左向外联接 由向外连接 交叉连接
嵌套查询: 指在一个外查询中包含有另一个内层查询.其中外查询成为主查询,内层查询成为子查询
sql允许都曾嵌套,但是子查询中一般不使用order by 子句,order by 子句只能对最终的查询结果进行排序
如何使用select语句的效率
1>使用exists关键字检查结果集, 不要用count(*)来检查结果集中是否包含行
2>使用标准联接代替嵌套查询. 在执行嵌套查询时,sql server将先执行内部的子查询,然后将查询结果返回给外部的查询作为检索的数据源,最后执行外部的主查询.而在执行包含标准联接的查询时,sql server将要执行的仅仅是一个查询.
3>有效避免整表扫描 使用索引
数据插入 每次只能插入一条记录. 格式1: insert into <表名> [(<列名1>[,<列名2>...] ) ] values ( <值1> [,<值2>...] );
格式2: insert into <表名> [ ( < 列名1 > [,<列名2>...] ) ] select 语句
把select语句查询的结果按顺序插入到对应的列中.允许一次插入多条记录.select查的各列值必须与<表名>后的各列值在个数,类型及顺序上一致.若<表名>后没有<列名>,则对该表的所有字段插入
数据修改 例:将95001学生转入ma系
update student set sdept='ma' where sno='95001'
删除数据 delete [ from ] { table_name | view_name } [ where 子句]
若无where部分,则删除整个表中全部数据,但表结构仍存在,即成为空表. delete只能整行删除,不能只删一行的部分
删除表中符合选择条件的行(一行或多行)
注意:数据更新语句只能对单表操作,不能同时对多个表更新(从而引起阶段性的数据不一致)
数据更新语句仅当事务提交后才正式生效,也可通过事务回滚来作废