码迷,mamicode.com
首页 > 数据库 > 详细

DDL数据库查询操作学习

时间:2015-05-30 09:14:55      阅读:269      评论:0      收藏:0      [点我收藏+]

标签:

 一 数据库初识

l SQLStructured Query Language(结构化查询语言)的缩写。

l SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言

    在使用它时,只需要发出做什么的命令,怎么做是不用使用者考虑的。

二 数据库的组成

l 1.一个SQL数据库是表(Table)的集合,它由一个或多个SQL模式定义。

l 2.一个SQL表由行集构成,一行是列的序列(集合),每列与行对应一个数据项

l 3.一个表或者是一个基本表或者是一个视图。基本表是实际存储在数据库的表,而视图是由若干基本表或其他视图构成的表的定义。

l 4.一个基本表可以跨一个或多个存储文件,一个存储文件也可存放一个或多个基本表。每个存储文件与外部存储上一个物理文件对应。

l 5.用户可以用SQL语句对视图和基本表进行查询等操作。在用户角度来看,视图和基本表是一样的,没有区别,都是关系(表格)

l 6.SQL用户可以是应用程序,也可以是终端用户。SQL语句可嵌入在宿主语言的程序中使用,宿主语言有FORTRANCOBOLPASCALPL/ICAda语言等。SQL用户也能作为独立的用户接口,供交互环境下的终端用户使用。

l 7   数据库有三种文件组成 主文件(.mdf)次文件(.ndf)日志文件(.ldf

       数据库中 至少必须有 .mdf  .ldf 组成。

三 数据库的操作(增删改查)

l 1.数据定义:这一部分又称为“SQL DDL”,定义数据库的逻辑结构,包括定义数据库database、基本表(table、视图(view索引4部分。

l 2 数据操纵:这一部分又称为“SQL DML”,其中包括数据查询和数据更新两大类操作,其中数据更新又包括插入、删除和更新三种操作。

l 3数据控制:对用户访问数据的控制有基本表和视图的授权、完整性规则的描述,事务控制语句等。

l 4.嵌入式SQL语言的使用规定:规定SQL语句在宿主语言的程序中使用的规则。 

四 数据库用法详解 (增删改查)

create database+数据库名字   创建数据库

对于表的操作:

l 建数据表 create  table 表名(列名1  类型,列名类型,列名类型~~~

l 说明:创建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
  根据已有的表创建新表:
Acreate table tab_new like tab_old (使用旧表创建新表)
Bcreate table tab_new as select col1,col2… from tab_old definition only

l 删除数据表 delete from 表名 where 列名=’’ drop table  表名字  删除表

l 表中插入值insert into 表名 (列名1,列名2··)values(列值1, 列值2,列值3··)   

l  更新表中信息

     update 表名 set 列名=‘’where 列名=‘’

     update 表名 set 列名=列名+‘要添加的信息’where=’’在原有的基                   

      础上添加信息

l 增加一个列:Alter table tabname add column col type
列增加后将不能删除。 唯一能改变的是增加varchar类型的长度。

 ★★★★★★★★★★★★★★★数据查询★★★★★★★★★★★★★★★

SQL是一种查询功能很强的语言,只要是数据库存在的数据,总能通过适当的方法将它从数据库中查找出来。SQL中的查询语句只有一个:SELECT,它可与其它语句配合完成所有的查询功能。SELECT语句的完整语法,可以有6个子句。完整的语法如下:
  SELECT 目标表的列名或列表达式集合
  FROM 基本表或()视图集合
  〔WHERE条件表达式〕
  〔GROUP BY列名集合
  〔HAVING组条件表达式〕〕
  〔ORDER BY列名〔集合〕

说明:简单查询,使用TOP子句;查询结果排序order by;带条件的查询where,使用算术表达式,使用逻辑表达式;使用between关键字;使用innot in,is, is not关键字,模糊查询like[3] 

整个语句的语义如下:从FROM子句中列出的表中,选择满足WHERE子句中给出的条件表达式的元组,然后按GROUPBY子句(分组子句)中指定列的值分组,再提取满足HAVING子句中组条件表达式的那些组,按SELECT子句给出的列名或列表达式求值输出。ORDER子句(排序子句)是对输出的目标表进行重新排序,并可附加说明ASC(升序)DESC(降序)排列。
  在WHERE子句中的条件表达式F中可出现下列操作符和运算函数:
  算术比较运算符:<<=>>==<>
  逻辑运算符:ANDORNOT
  集合运算符:UNION()INTERSECT()EXCEPT()

   集合成员资格运算符:INNOT IN
  谓词:EXISTS(存在量词)ALLSOMEUNIQUE
  聚合函数:AVG(平均值)MIN(最小值)MAX(最大值)SUM()COUNT(计数)                 
  F中运算对象还可以是另一个SELECT语句,即SELECT语句可以嵌套。
  上面只是列出了WHERE子句中可出现的几种主要操作,由于WHERE子句中的条件表达式可以很复杂,因此SELECT句型能表达的语义远比其数学原形要复杂得多。

语句用法罗列:(以一个汽车表为例子)

l  select * from Car-- 查询car所有的列

l select distinct oil from Car --消除重复行;

l select Name from Car--只显示某一列

l select distinct brand from Car--只显示某一列并消除本列中重复的值

l select * from car where Brand=‘b003‘ --等值筛选”将与筛选项相等的列选出

l select *from Car where Price>50--不等值筛选数据 将大于某值的数据列出

l select *from Car where Price<30--不等值筛;数据,将小于某值的数据列出

l select *from Car where Price>30and price<50--多条件筛选

l select *from Car where Price>30 and Oil<--逻辑‘与’用单词and

l select *from Car where Price>50 or Price<20--逻辑‘或’用单词or

l select * from Car where price between 30 and 50--筛选出价格在30-50万之间的车

l 说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括
A   select * from table1 where time between time1 and time2
B   select a,b,c, from table1 where a not between 数值1 and 数值2

l select *from Car where Name like‘奥迪%‘--%后面有任意多个。模糊查询 like

l select *from Car where Name like‘%‘--末尾型查询,模糊查询

l select *from Car where Name like‘%5%‘--中间型查询,模糊查询

l select *from Car where Name like ‘__5%‘--模糊查询 中间第几位数字

l select  top 10 *from Car price --筛选出按照价格排名前10名的车子  

l  select distinct Exhaust from Car where Price>40 and Price<50 --4050万之间的排量类型

l select *from fruit--显示fruit 这一列

l 说明:in 的使用方法
select * from table1 where a [not] in (‘值1,’值2,’值4,’值6)

l update fruit set numbers=numbers-20 where name=‘桔子‘--直接更改某一列的值

l update fruit set numbers=30 where name=‘苹果‘--直接更改某一项的值

l update fruit set price =5.2,source=‘肥城‘, numbers=50 where name=‘桃子‘--注意更改多项时加逗号;

l select name, price*numbers  as ‘成本‘ from fruit--增加列名

--select name ‘成本‘  from price  

l select *from Car order by Price asc--按照价格升序

l select *from car order by price desc--按照价格降序

l select *from Car order by Oil asc,price desc --按照油耗有小到大排序同时按照价格由大到小 

l 说明:随机取出10条数据
select top 10 * from tablename order by newid()

l 说明:两张关联表,删除主表中已经在副表中没有的信息
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )

l 说明:一条sql 语句搞定数据库分页
select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段

l 说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
(select a from tableA ) except (select a from tableB) except (select a from tableC)


l 几个简单的基本的sql语句
  选择:select * from table1 where 范围
  插入:insert into table1(field1,field2) values(value1,value2)
  删除:delete from table1 where 范围
  更新:update table1 set field1=value1 where 范围
  查找:select * from table1 where field1 like %value1%’ ---like的语法很精妙,查资料!
  排序:select * from table1 order by field1,field2 [desc]
  总数:select count * as totalcount from table1
  求和:select sum(field1) as sumvalue from table1
  平均:select avg(field1) as avgvalue from table1
  最大:select max(field1) as maxvalue from table1
  最小:select min(field1) as minvalue from table1
说明:几个高级查询运算词
  A: UNION 运算符
  UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2
  B: EXCEPT 运算符
  EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。     

例句  说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
(select a from tableA ) except (select a from tableB) except (select a from tableC)

  C: INTERSECT 运算符
  INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
  注:使用运算词的几个查询结果行必须是一致的。
说明:使用外连接
  Aleft outer join
  左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
  Bright outer join:
  右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
  Cfull outer join
  全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
  精妙的sql语句
  1、说明:复制表(只复制结构,源表名:新表名:b) (Access可用)
  法一:select * into b from a where 1<>1
  法二:select top 0 * into b from a
  2、说明:拷贝表(拷贝数据,源表名:目标表名:b) (Access可用)
insert into b(a, b, c) select d,e,f from b;
  3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)
insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件
  例子:..from b in "&Server.MapPath(".")&"\data.mdb" &"’ where..
  4、说明:子查询(表名1表名2b)
select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)

 数据查询方式

连接查询:  连接查询是在多表查询操作中常用的必须使用的一种操作。多表查询时,必训使用外部件作为连接属性,当连接查询条件为空时将产生笛卡尔积。

连接查询包括两种,内连接(inner join)外连接

内连接 语法:from 1 join 2 on 1.属性值=2.属性值

            From 1,表2 where 1主键值=表二外键值

外连接 外连接 会返回from 子句中提到的至少一个表的所有行只要这些行符合任意where 条件,将检索通过左向外连接引用的左表的所有的行,以及通过右向外连接引用的右表的所有的行,完整外部连接中两个表的所有行都返回。

连接查询:列的扩展

1. 等值连接查询 (内连接)

   笛卡尔积    select Info.Code,Info.Name,Nation.Name from Info,Nation where Nation.Code = Info.Nation   join on

SELECT Info.Code,Info.Name,Nation.Name,Family.Name from Info JOIN Nation on 

Nation.Code = Info.Nation JOIN Family on Info.Code=Family.InfoCode

2. 外连接(left.right.full

l    left左连接:  left 左边表为主表 ,右边的为从表,显示的结果集以主表为主 如果从表中没有和它匹配的数据,就以NULL值填充

   SELECT Info.Code,Info.Name,Nation.Name from Info right JOIN Nation on 

    Nation.Code = Info.Nation    

l  right右连接:   right 右边的表为主表

l SELECT Info.Code,Info.Name,Nation.Name from Info full JOIN Nation on Nation.Code = Info.Nation

l    full 全连接

       每个表都完全显示,互相匹配数据,如果对方没有则以NULL填充

联合查询:行的扩展

SELECT Code,Name from Info

UNION

SELECT code,Name from Nation

Union将两个查询联合起来显示,追加行的形式在结果集中显示, 必须保证两个查询结果的列的格式是一样的。其中 union 对比必须选择相同的列数相似的数据类型.和相同的顺序。在合并结果时将删除重复行 如果使用all 则全部显示。

详细交流: qq 793059747,相互学习,共同进步!

 

DDL数据库查询操作学习

标签:

原文地址:http://www.cnblogs.com/woniu-net/p/4539797.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!