DDL数据库查询操作学习

一 数据库初识

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

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

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

二 数据库的组成

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

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

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

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

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

l 6.SQL用户可以是应用程序,也可以是终端用户。SQL语句可嵌入在宿主语言的程序中使用,宿主语言有FORTRAN,COBOL,PASCAL,PL/I,C和Ada语言等。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  类型,列名2 类型,列名3 类型~~~)

l 说明:创建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
  根据已有的表创建新表:
A:create table tab_new like tab_old (使用旧表创建新表)
B:create 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关键字;使用in,not in,is, is not等关键字,模糊查询like[3]

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

 集合成员资格运算符:IN,NOT IN
  谓词:EXISTS(存在量词),ALL,SOME,UNIQUE。
  聚合函数: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 --40到50万之间的排量类型

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),不消除重复行。
  注:使用运算词的几个查询结果行必须是一致的。
说明:使用外连接
  A、left 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
  B:right outer join:
  右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
  C:full outer join:
  全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
  精妙的sql语句
  1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
  法一:select * into b from a where 1<>1
  法二:select top 0 * into b from a
  2、说明:拷贝表(拷贝数据,源表名:a 目标表名: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:a 表名2:b)
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,相互学习,共同进步!

时间: 2024-10-18 09:09:56

DDL数据库查询操作学习的相关文章

数据库查询操作(fetchone,fetchall)

数据库查询操作 Python查询Mysql使用 fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据. fetchone(): 该方法获取下一个查询结果集.结果集是一个对象 fetchall():接收全部的返回结果行. rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数. fetchone() : 返回单个的元组,也就是一条记录(row),如果没有结果 则返回 None fetchall() : 返回多个元组,即返回多个记录(row

本文主要介绍python对oracle数据库的操作学习

包含:oracle数据库在Windows操作系统下的安装和配置.python需要安装的第三方拓展包以及基本操作的样例学习. Oracle数据库 Oracle环境配置&客户端连接 下载安装Oracle绿色版客户端instantclient: 到oracle官网下载instantclient basic包,解压缩到E:\ProgramFile\instantclient: 设置环境变量: NLS_lANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK(注意中间有空格,这个如果不

数据库查询操作

1.distinct 消除取值相同的行. 2. in    列名 [not] in   (常量1, 常量2...) 确定某个属性的值是否在一个集合范围内. 3.字符串匹配. like    :  列名 [not] like  < 匹配串> 匹配字符串可以包含字符常量,也可以包含如下四种通配符. ① _ : 匹配任意一个字符. ②%:匹配0个或多个字符. ③[ ]:匹配"[ ] " 中的任意一个字符.如[acdg]表示匹配a.c.d.g中的任何一个.对于连续字母的匹配,例如[

简单的数据库查询操作

格式: select <目标列名序列>    ---需要哪些列from <表名>        ---来自于哪些表where <行选择条件>    ---根据什么条件group by <分组依据列>having <组选择条件>order by <排序依据列> select * from student select * from student where sno = '1' select * from student s,cours

mysql数据库查询操作

数据查询语言 SELECT 列名1,列名2...FROM 表名 [WHERE条件] 查询所有字段用* 不带where条件就把表的所有记录查出来 =    //赋值和判断都是 !=   <> //两种不等于 <  >   <=    >= OR 或者 || AND 且 && BETWEEN 5 AND 10 IN NOT IN LIKE  '%值%' 一些简单的查询,以user表为例,sex->0表示男,1表示女 查询所有 sleect * from

数据库查询操作练习

CREATE TABLE `student` ( `sno` varchar(20) NOT NULL COMMENT '学号', `sname` varchar(20) NOT NULL COMMENT '学生姓名', `ssex` varchar(20) NOT NULL COMMENT '学生性别', `sbirthday` datetime DEFAULT NULL COMMENT '学生出生年月', `class` varchar(20) DEFAULT NULL COMMENT '学

Python操作mysql数据库查询操作时提示“unread-result-found”

原因描述: 当Windows操作系统损坏时,会出现"unread-result-found"错误,比如启动程序将会变慢,响应时间将会延迟.当运行多个应用程序时,可能会遇到崩溃和死机.这个错误可能有很多原因,包括过多的启动条目.注册表错误.硬件/RAM下降.碎片文件.不必要的或冗余的程序安装等等. 解决方法: 为了解决刚才提到的问题,您可以显著地提高机器的速度.为了修复错误和提高PC速度,建议您下载' mysql .connect .error .internalerror Unread

5- MySQL数据库查询操作

复习: 数据类型: 数值型:整数(int,tinyint,smallint,bigint,mediumint) 浮点型(float ,double,decimal) 字符型:char ,varchar,text. 日期时间,date,time,datetime,timestamp. 创建表:create table表名 原文地址:https://www.cnblogs.com/Chamberlain/p/10970786.html

数据库表的查询操作实践演练(实验三),数据库演练

继前两次的实验,本次实验以熟练掌握利用select语句进行各种查询操作:单表查询.多表连接及查询.嵌套查询.集合查询等,巩固数据库查询操作.下面就跟着小编一起练习吧!在实验一创建并插入数据的表(Student, Course,SC,Teacher,TC)的基础上,完成以下操作.(1)将教师‘罗莉'的名字改为‘罗莉莉'.复制代码 代码如下:update Teacher set tname='罗莉莉' where tname='罗莉'(2)将两个同学(数据自己临时设置,用后即删除)的两门课程的成绩以