sql100个基础知识,OraclePLSQL基础知识及其相关概念
sql100个基础知识,OraclePLSQL基础知识及其相关概念详细介绍
本文目录一览: SQL数据库常用命令及语法举例
SQL Server数据库中的AS使用
下面是一些常用的SQL语句,虽然很基础,可是却很值得收藏,对于初学者非常实用
SQL常用命令使用方法:(1) 数据记录筛选:
sql="select * from 数据表 where 字段名=字段值 order by 字段名 [desc]"
sql="select * from 数据表 where 字段名 like '%字段值%' order by 字段名 [desc]"
sql="select top 10 * from 数据表 where 字段名 order by 字段名 [desc]"
sql="select * from 数据表 where 字段名 in ('值1','值2','值3')"
sql="select * from 数据表 where 字段名 between 值1 and 值2"
(2) 更新数据记录:
sql="update 数据表 set 字段名=字段值 where 条件表达式"
sql="update 数据表 set 字段1=值1,字段2=值2 …… 字段n=值n where 条件表达式"
(3) 删除数据记录:
sql="delete from 数据表 where 条件表达式"
sql="delete from 数据表" (将数据表所有记录删除)
(4) 添加数据记录:
sql="insert into 数据表 (字段1,字段2,字段3 …) values (值1,值2,值3 …)"
sql="insert into 目标数据表 select * from 源数据表" (把源数据表的记录添加到目标数据表)
(5) 数据记录统计函数:
AVG(字段名) 得出一个表格栏平均值
COUNT(*|字段名) 对数据行数的统计或对某一栏有值的数据行数统计
MAX(字段名) 取得一个表格栏最大的值
MIN(字段名) 取得一个表格栏最小的值
SUM(字段名) 把数据栏的值相加
引用以上函数的方法:
sql="select sum(字段名) as 别名 from 数据表 where 条件表达式"
set rs=conn.excute(sql)
用 rs("别名") 获取统的计值,其它函数运用同上。
(5) 数据表的建立和删除:
CREATE TABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度) …… )
例:CREATE TABLE tab01(name varchar(50),datetime default now())
DROP TABLE 数据表名称 (永久性删除一个数据表)
4. 记录集对象的方法:
rs.movenext 将记录指针从当前的位置向下移一行
rs.moveprevious 将记录指针从当前的位置向上移一行
rs.movefirst 将记录指针移到数据表第一行
rs.movelast 将记录指针移到数据表最后一行
rs.absoluteposition=N 将记录指针移到数据表第N行
rs.absolutepage=N 将记录指针移到第N页的第一行
rs.pagesize=N 设置每页为N条记录
rs.pagecount 根据 pagesize 的设置返回总页数
rs.recordcount 返回记录总数
rs.bof 返回记录指针是否超出数据表首端,true表示是,false为否
rs.eof 返回记录指针是否超出数据表末端,true表示是,false为否
rs.delete 删除当前记录,但记录指针不会向下移动
rs.addnew 添加记录到数据表末端
rs.update 更新数据表记录
参考资料
SQL常用命令.csdn[引用时间2017-12-30]
OraclePLSQL基础知识及其相关概念
结构化查询语言(Structured Query Language 简称SQL)是用来访问关系型数据库一种通用语言 属于第四代语言( GL) 其执行特点是非过程化 即不用指明执行的具体方法和途径 而是简单地调用相应语句来直接取得结果即可 显然 这种不关注任何实现细节的语言对于开发者来说有着极大的便利 然而 有些复杂的业务流程要求相应的程序来描述 这种情况下 GL就有些无能为力了 Oracle L/SQL的出现正是为了解决这一问题 Oracle PL/SQL是一种过程化语言 属于第三代语言 它与C C++ Java等语言一样关注于处理细节 可以用来实现比较复杂的业务逻辑
一 编程基础知识
程序结构
Oracle PL/SQL程序都是以块(block)为基本单位 整个Oracle PL/SQL块分三部分 声明部分(用declare开头) 执行部分(以 begin开头)和异常处理部分(以exception开头) 其中执行部分是必须的 其他两个部分可选 无论Oracle PL/SQL程序段的代码量有多大 其基本结构就是由这三部分组成
控制结构
Oracle PL/SQL程序段中有三种程序结构 条件结构 循环结构和顺序结构
) 条件结构
与其它语言完全类似 语法结构如下
if condition then
statement
else
statement
end if ;
)循环结构
这一结构与其他语言不太一样 在PL/SQL程序中有三种循环结构
a loop … end loop;
b while condition loop … end loop;
c for variable in low_bound upper_bound loop … end loop;
其中的 … 代表循环体
)顺序结构
实际就是goto的运用 不过从程序控制的角度来看 尽量少用goto可以使得程序结构更加的清晰
变量声明与赋值
Oracle PL/SQL主要用于数据库编程 所以其所有的数据类型跟Oracle数据库里的字段类型是一一对应的 大体分为数字型 布尔型 字符型和日期型 这里简单介绍两种常用数据类型 number varchar
)number 用来存储整数和浮点数 范围为1e ~ e 其使用语法为 number[(precision scale)]
其中(precision scale)是可选的 precision表示所有数字的个数 scale表示小数点右边数字的个数
)varchar 用来存储变长的字符串 其使用语法为 varchar [(size)]
其中size为可选 表示该字符串所能存储的最大长度
在Oracle PL/SQL中声明变量与其他语言不太一样 它采用从右往左的方式声明 比如声明一个number类型的变量v_id 那其形式应为 v_id nunmer;
如果给上面的v_id变量赋值 不能用 = 应该用 := 即形式为:v_id := ;
SQL基本命令
PL/SQL使用的数据库操作语言还是基于SQL的 所以熟悉SQL是进行Oracle PL/SQL编程的基础 SQL语言的分类情况大致如下
) 数据定义语言(DDL) Create Drop Grant Revoke …
) 数据操纵语言(DML) Update Insert Delete …
) 数据控制语言(DCL) Commit Rollback Savapoint …
) 其他 Alter System Connect Allocate …
具体的语法结构可以参阅其他关于SQL语言的资料 这里不再赘述
二 过程与函数
Oracle PL/SQL中的过程和函数与其他语言的过程和函数一样 都是为了执行一定的任务而组合在一起的语句 过程无返回值 函数有返回值
其语法结构为
过程 Create or replace procedure procname(参数列表) as PL/SQL语句块
函数 Create or replace function funcname(参数列表) return 返回值 as PL/SQL语句块
三 游标
游标的定义为 用游标来指代一个DML SQL操作返回的结果集 即当一个对数据库的查询操作返回一组结果集时 用游标来标注这组结果集 以后通过对游标的操作来获取结果集中的数据信息 这里特别提出游标的概念 是因为它在PL/SQL的编程中非常的重要 定义游标的语法结构如下 cursor cursor_name is SQL语句;
四 其他概念
Oracle PL/SQL中包的概念很重要 主要是对一组功能相近的过程和函数进行封装 类似于面向对象中的名字空间的概念
lishixinzhi/Article/program/Oracle/201311/18883
关于SQL的基本知识和影响Recordset的游标类型
程序数据库类 ASP与Access数据库连接 <%@ language=VBscript%> <% dim conn mdbfile mdbfile=server mappath( 数据库名称 mdb ) set conn=server createobject( nnection ) conn open driver={microsoft access driver (* mdb)};uid=admin;pwd=数据库密码;dbq= &mdbfile %> ASP与SQL数据库连接 <%@ language=VBscript%> <% dim conn set conn=server createobject( nnection ) con open PROVIDER=SQLOLEDB;DATA SOURCE=SQL服务器名称或IP地址;UID=sa;PWD=数据库密码;DATABASE=数据库名称 %> 建立记录集对象 set rs=server createobject( adodb recordset ) rs open SQL语句 conn SQL常用命令使用方法 ( ) 数据记录筛选 sql= select * from 数据表 where 字段名=字段值 order by 字段名 [desc] sql= select * from 数据表 where 字段名 like %字段值% order by 字段名 [desc] sql= select top * from 数据表 where 字段名 order by 字段名 [desc] sql= select * from 数据表 where 字段名 in ( 值 值 值 ) sql= select * from 数据表 where 字段名 beeen 值 and 值 ( ) 更新数据记录 sql= update 数据表 set 字段名=字段值 where 条件表达式 sql= update 数据表 set 字段 =值 字段 =值 …… 字段n=值n where 条件表达式 ( ) 删除数据记录 sql= delete from 数据表 where 条件表达式 sql= delete from 数据表 (将数据表所有记录删除) ( ) 添加数据记录 sql= insert into 数据表 (字段 字段 字段 …) values (值 值 值 …) sql= insert into 目标数据表 select * from 源数据表 (把源数据表的记录添加到目标数据表) ( ) 数据记录统计函数 AVG(字段名) 得出一个表格栏平均值 COUNT(*|字段名) 对数据行数的统计或对某一栏有值的数据行数统计 MAX(字段名) 取得一个表格栏最大的值 MIN(字段名) 取得一个表格栏最小的值 SUM(字段名) 把数据栏的值相加 引用以上函数的方法 sql= select sum(字段名) as 别名 from 数据表 where 条件表达式 set rs=conn excute(sql) 用 rs( 别名 ) 获取统的计值 其它函数运用同上 ( ) 数据表的建立和删除 CREATE TABLE 数据表名称(字段 类型 (长度) 字段 类型 (长度) …… ) 例 CREATE TABLE tab (name varchar( ) datetime default now()) DROP TABLE 数据表名称 (永久性删除一个数据表) 记录集对象的方法 rs movenext 将记录指针从当前的位置向下移一行 rs moveprevious 将记录指针从当前的位置向上移一行 rs movefirst 将记录指针移到数据表第一行 rs movelast 将记录指针移到数据表最后一行 rs absoluteposition=N 将记录指针移到数据表第N行 rs absolutepage=N 将记录指针移到第N页的第一行 rs pagesize=N 设置每页为N条记录 rs pagecount 根据 pagesize 的设置返回总页数 rs recordcount 返回记录总数 rs bof 返回记录指针是否超出数据表首端 true表示是 false为否 rs eof 返回记录指针是否超出数据表末端 true表示是 false为否 rs delete 删除当前记录 但记录指针不会向下移动 rs addnew 添加记录到数据表末端 rs update 更新数据表记录 Recordset对象方法 Open方法 recordset Open Source ActiveConnection CursorType LockType Options Source Recordset对象可以通过Source属性来连接Command对象 Source参数可以是一个Command对象名称 一段SQL命令 一个指定的数据表名称或是一个Stored Procedure 假如省略这个参数 系统则采用Recordset对象的Source属性 ActiveConnection Recordset对象可以通过ActiveConnection属性来连接Connection对象 这里的ActiveConnection可以是一个Connection对象或是一串包含数据库连接信息(ConnectionString)的字符串参数 CursorType Recordset对象Open方法的CursorType参数表示将以什么样的游标类型启动数据 包括adOpenForwardOnly adOpenKeyset adOpenDynamic及adOpenStatic 分述如下 常数 常数值 说明 adOpenForwardOnly 缺省值 启动一个只能向前移动的游标(Forward Only) adOpenKeyset 启动一个Keyset类型的游标 adOpenDynamic 启动一个Dynamic类型的游标 adOpenStatic 启动一个Static类型的游标 以上几个游标类型将直接影响到Recordset对象所有的属性和方法 以下列表说明他们之间的区别 Recordset属性 adOpenForwardOnly adOpenKeyset adOpenDynamic adOpenStatic AbsolutePage 不支持 不支持 可读写 可读写 AbsolutePosition 不支持 不支持 可读写 可读写 ActiveConnection 可读写 可读写 可读写 可读写 BOF 只读 只读 只读 只读 Bookmark 不支持 不支持 可读写 可读写 CacheSize 可读写 可读写 可读写 可读写 CursorLocation 可读写 可读写 可读写 可读写 CursorType 可读写 可读写 可读写 可读写 EditMode 只读 只读 只读 只读 EOF 只读 只读 只读 只读 Filter 可读写 可读写 可读写 可读写 LockType 可读写 可读写 可读写 可读写 MarshalOptions 可读写 可读写 可读写 可读写 MaxRecords 可读写 可读写 可读写 可读写 PageCount 不支持 不支持 只读 只读 PageSize 可读写 可读写 可读写 可读写 RecordCount 不支持 不支持 只读 只读 Source 可读写 可读写 可读写 可读写 State 只读 只读 只读 只读 Status 只读 只读 只读 只读 AddNew 支持 支持 支持 支持 CancelBatch 支持 支持 支持 支持 CancelUpdate 支持 支持 支持 支持 Clone 不支持 不支持 Close 支持 支持 支持 支持 Delete 支持 支持 支持 支持 GetRows 支持 支持 支持 支持 Move 不支持 支持 支持 支持 MoveFirst 支持 支持 支持 支持 MoveLast 不支持 支持 支持 支持 MoveNext 支持 支持 支持 支持 MovePrevious 不支持 支持 支持 支持 NextRecordset 支持 支持 支持 支持 Open 支持 支持 支持 支持 Requery 支持 支持 支持 支持 Resync 不支持 不支持 支持 支持 Supports 支持 支持 支持 支持 Update 支持 支持 支持 支持 UpdateBatch 支持 支持 支持 支持 其中NextRecordset方法并不适用于Microsoft Access数据库 LockType Recordset对象Open方法的LockType参数表示要采用的Lock类型 如果忽略这个参数 那么系统会以Recordset对象的LockType属性为预设值 LockType参数包含adLockReadOnly adLockPrssimistic adLockOptimistic及adLockBatchOptimistic等 分述如下 常数 常数值 说明 adLockReadOnly 缺省值 Recordset对象以只读方式启动 无法运行AddNew Update及Delete等方法 adLockPrssimistic 当数据源正在更新时 系统会暂时锁住其他用户的动作 以保持数据一致性 adLockOptimistic 当数据源正在更新时 系统并不会锁住其他用户的动作 其他用户可以对数据进行增 删 改的操作 adLockBatchOptimistic 当数据源正在更新时 其他用户必须将CursorLocation属性改为adUdeClientBatch才能对数据进行增 删 改的操作 lishixinzhi/Article/program/SQLServer/201311/22247
数据库常用sql语句有哪些
数据库常用sql语句
Student(S#,Sname,Sage,Ssex) 学生表
Course(C#,Cname,T#) 课程表
SC(S#,C#,score) 成绩表
Teacher(T#,Tname) 教师表
问题:
1、查询“001”课程比“002”课程成绩高的所有学生的学号;
select a.S# from (select s#,score from SC where C#='001') a,(select s#,score
from SC where C#='002') b
where a.score>b.score and a.s#=b.s#;
2、查询平均成绩大于60分的同学的学号和平均成绩;
select S#,avg(score)
from sc
group by S# having avg(score) >60;
3、查询所有同学的学号、姓名、选课数、总成绩;
select Student.S#,Student.Sname,count(SC.C#),sum(score)
from Student left Outer join SC on Student.S#=SC.S#
group by Student.S#,Sname
4、查询姓“李”的老师的个数;
select count(distinct(Tname))
from Teacher
where Tname like '李%';
5、查询没学过“叶平”老师课的同学的学号、姓名;
select Student.S#,Student.Sname
from Student
where S# not in (select distinct( SC.S#) from SC,Course,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='叶平');
6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;
select Student.S#,Student.Sname from Student,SC where Student.S#=SC.S# and SC.C#='001'and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#='002');
7、查询学过“叶平”老师所教的所有课的同学的学号、姓名;
select S#,Sname
from Student
where S# in (select S# from SC ,Course ,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='叶平' group by S# having count(SC.C#)=(select count(C#) from Course,Teacher where Teacher.T#=Course.T# and Tname='叶平'));
8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;
Select S#,Sname from (select Student.S#,Student.Sname,score ,(select score from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#='002') score2
from Student,SC where Student.S#=SC.S# and C#='001') S_2 where score2
<score;
9、查询所有课程成绩小于60分的同学的学号、姓名;
select S#,Sname
from Student
where S# not in (select Student.S# from Student,SC where S.S#=SC.S# and score>60);
10、查询没有学全所有课的同学的学号、姓名;
select Student.S#,Student.Sname
from Student,SC
where Student.S#=SC.S# group by Student.S#,Student.Sname having count(C#) <(select count(C#) from Course);
11、查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名;
select S#,Sname from Student,SC where Student.S#=SC.S# and C# in select C# from SC where S#='1001';
12、查询至少学过学号为“001”同学所有一门课的其他同学学号和姓名;
select distinct SC.S#,Sname
from Student,SC
where Student.S#=SC.S# and C# in (select C# from SC where S#='001');
13、把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩;
SC set score=(select avg(SC_2.score)
from SC SC_2
where SC_2.C#=SC.C# ) from Course,Teacher where Course.C#=SC.C# and Course.T#=Teacher.T# and Teacher.Tname='叶平');
14、查询和“1002”号的同学学习的课程完全相同的其他同学学号和姓名;
select S# from SC where C# in (select C# from SC where S#='1002')
group by S# having count(*)=(select count(*) from SC where S#='1002');
15、删除学习“叶平”老师课的SC表记录;
Delect SC
from course ,Teacher
where Course.C#=SC.C# and Course.T#= Teacher.T# and Tname='叶平';
16、向SC表中插入一些记录,这些记录要求符合以下条件:没有上过编号“003”课程的同学学号、2、
号课的平均成绩;
Insert SC select S#,'002',(Select avg(score)
from SC where C#='002') from Student where S# not in (Select S# from SC where C#='002');
17、按平均成绩从高到低显示所有学生的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显示: 学生ID,,数据库,企业管理,英语,有效课程数,有效平均分
SELECT S# as 学生ID
,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='004') AS 数据库
,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='001') AS 企业管理
,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='006') AS 英语
,COUNT(*) AS 有效课程数, AVG(t.score) AS 平均成绩
FROM SC AS t
GROUP BY S#
ORDER BY avg(t.score)
18、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分
SELECT L.C# As 课程ID,L.score AS 最高分,R.score AS 最低分
FROM SC L ,SC AS R
WHERE L.C# = R.C# and
L.score = (SELECT MAX(IL.score)
FROM SC AS IL,Student AS IM
WHERE L.C# = IL.C# and IM.S#=IL.S#
GROUP BY IL.C#)
AND
R.Score = (SELECT MIN(IR.score)
FROM SC AS IR
WHERE R.C# = IR.C#
GROUP BY IR.C#
);
19、按各科平均成绩从低到高和及格率的百分数从高到低顺序
SELECT t.C# AS 课程号,max(course.Cname)AS 课程名,isnull(AVG(score),0) AS 平均成绩
,100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) AS 及格百分数
FROM SC T,Course
where t.C#=course.C#
GROUP BY t.C#
ORDER BY 100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) DESC
20、查询如下课程平均成绩和及格率的百分数(用"1行"显示): 企业管理(001),马克思(002),OO&UML (003),数据库(004)
SELECT SUM(CASE WHEN C# ='001' THEN score ELSE 0 END)/SUM(CASE C# WHEN '001' THEN 1 ELSE 0 END) AS 企业管理平均分
,100 * SUM(CASE WHEN C# = '001' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '001' THEN 1 ELSE 0 END) AS 企业管理及格百分数
,SUM(CASE WHEN C# = '002' THEN score ELSE 0 END)/SUM(CASE C# WHEN '002' THEN 1 ELSE 0 END) AS 马克思平均分
,100 * SUM(CASE WHEN C# = '002' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '002' THEN 1 ELSE 0 END) AS 马克思及格百分数
,SUM(CASE WHEN C# = '003' THEN score ELSE 0 END)/SUM(CASE C# WHEN '003' THEN 1 ELSE 0 END) AS UML平均分
,100 * SUM(CASE WHEN C# = '003' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '003' THEN 1 ELSE 0 END) AS UML及格百分数
,SUM(CASE WHEN C# = '004' THEN score ELSE 0 END)/SUM(CASE C# WHEN '004' THEN 1 ELSE 0 END) AS 数据库平均分
,100 * SUM(CASE WHEN C# = '004' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '004' THEN 1 ELSE 0 END) AS 数据库及格百分数
FROM SC
21、查询不同老师所教不同课程平均分从高到低显示
SELECT max(Z.T#) AS 教师ID,MAX(Z.Tname) AS 教师姓名,C.C# AS 课程ID,MAX(C.Cname) AS 课程名称,AVG(Score) AS 平均成绩
FROM SC AS T,Course AS C ,Teacher AS Z
where T.C#=C.C# and C.T#=Z.T#
GROUP BY C.C#
ORDER BY AVG(Score) DESC
22、查询如下课程成绩第 3 名到第 6 名的学生成绩单:企业管理(001),马克思(002),UML (003),数据库(004)
[学生ID],[学生姓名],企业管理,马克思,UML,数据库,平均成绩
SELECT DISTINCT top 3
SC.S# As 学生学号,
Student.Sname AS 学生姓名 ,
T1.score AS 企业管理,
T2.score AS 马克思,
T3.score AS UML,
T4.score AS 数据库,
ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) as 总分
FROM Student,SC LEFT JOIN SC AS T1
ON SC.S# = T1.S# AND T1.C# = '001'
LEFT JOIN SC AS T2
ON SC.S# = T2.S# AND T2.C# = '002'
LEFT JOIN SC AS T3
ON SC.S# = T3.S# AND T3.C# = '003'
LEFT JOIN SC AS T4
ON SC.S# = T4.S# AND T4.C# = '004'
WHERE student.S#=SC.S# and
ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)
NOT IN
(SELECT
DISTINCT
TOP 15 WITH TIES
ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)
FROM sc
LEFT JOIN sc AS T1
ON sc.S# = T1.S# AND T1.C# = 'k1'
LEFT JOIN sc AS T2
ON sc.S# = T2.S# AND T2.C# = 'k2'
LEFT JOIN sc AS T3
ON sc.S# = T3.S# AND T3.C# = 'k3'
LEFT JOIN sc AS T4
ON sc.S# = T4.S# AND T4.C# = 'k4'
ORDER BY ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) DESC);
23、统计列印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[<60]
SELECT SC.C# as 课程ID, Cname as 课程名称
,SUM(CASE WHEN score BETWEEN 85 AND 100 THEN 1 ELSE 0 END) AS [100 - 85]
,SUM(CASE WHEN score BETWEEN 70 AND 85 THEN 1 ELSE 0 END) AS [85 - 70]
,SUM(CASE WHEN score BETWEEN 60 AND 70 THEN 1 ELSE 0 END) AS [70 - 60]
,SUM(CASE WHEN score < 60 THEN 1 ELSE 0 END) AS [60 -]
FROM SC,Course
where SC.C#=Course.C#
GROUP BY SC.C#,Cname;
24、查询学生平均成绩及其名次
SELECT 1+(SELECT COUNT( distinct 平均成绩)
FROM (SELECT S#,AVG(score) AS 平均成绩
FROM SC
GROUP BY S#
) AS T1
WHERE 平均成绩 > T2.平均成绩) as 名次,
S# as 学生学号,平均成绩
FROM (SELECT S#,AVG(score) 平均成绩
FROM SC
GROUP BY S#
) AS T2
ORDER BY 平均成绩 desc;
25、查询各科成绩前三名的记录:(不考虑成绩并列情况)
SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数
FROM SC t1
WHERE score IN (SELECT TOP 3 score
FROM SC
WHERE t1.C#= C#
ORDER BY score DESC
)
ORDER BY t1.C#;
26、查询每门课程被选修的学生数
select c#,count(S#) from sc group by C#;
27、查询出只选修了一门课程的全部学生的学号和姓名
select SC.S#,Student.Sname,count(C#) AS 选课数
from SC ,Student
where SC.S#=Student.S# group by SC.S# ,Student.Sname having count(C#)=1;
28、查询男生、女生人数
Select count(Ssex) as 男生人数 from Student group by Ssex having Ssex='男';
Select count(Ssex) as 女生人数 from Student group by Ssex having Ssex='女';
29、查询姓“张”的学生名单
SELECT Sname FROM Student WHERE Sname like '张%';
30、查询同名同性学生名单,并统计同名人数
select Sname,count(*) from Student group by Sname having count(*)>1;;
31、1981年出生的学生名单(注:Student表中Sage列的类型是datetime)
select Sname, CONVERT(char (11),DATEPART(year,Sage)) as age
from student
where CONVERT(11),DATEPART(year,Sage))='1981';
32、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列
Select C#,Avg(score) from SC group by C# order by Avg(score),C# DESC ;
33、查询平均成绩大于85的所有学生的学号、姓名和平均成绩
select Sname,SC.S# ,avg(score)
from Student,SC
where Student.S#=SC.S# group by SC.S#,Sname having avg(score)>85;
34、查询课程名称为“数据库”,且分数低于60的学生姓名和分数
Select Sname,isnull(score,0)
from Student,SC,Course
where SC.S#=Student.S# and SC.C#=Course.C# and Course.Cname='数据库'and score<60;
35、查询所有学生的选课情况;
SELECT SC.S#,SC.C#,Sname,Cname
FROM SC,Student,Course
where SC.S#=Student.S# and SC.C#=Course.C# ;
36、查询任何一门课程成绩在70分以上的姓名、课程名称和分数;
SELECT distinct student.S#,student.Sname,SC.C#,SC.score
FROM student,Sc
WHERE SC.score>=70 AND SC.S#=student.S#;
37、查询不及格的课程,并按课程号从大到小排列
select c# from sc where scor e<60 order by C# ;
38、查询课程编号为003且课程成绩在80分以上的学生的学号和姓名;
select SC.S#,Student.Sname from SC,Student where SC.S#=Student.S# and Score>80 and C#='003';
39、求选了课程的学生人数
select count(*) from sc;
40、查询选修“叶平”老师所授课程的学生中,成绩最高的学生姓名及其成绩
select Student.Sname,score
from Student,SC,Course C,Teacher
where Student.S#=SC.S# and SC.C#=C.C# and C.T#=Teacher.T# and Teacher.Tname='叶平' and SC.score=(select max(score)from SC where C#=C.C# );
41、查询各个课程及相应的选修人数
select count(*) from sc group by C#;
42、查询不同课程成绩相同的学生的学号、课程号、学生成绩
select distinct A.S#,B.score from SC A ,SC B where A.Score=B.Score and A.C# <>B.C# ;
43、查询每门功成绩最好的前两名
SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数
FROM SC t1
WHERE score IN (SELECT TOP 2 score
FROM SC
WHERE t1.C#= C#
ORDER BY score DESC
)
ORDER BY t1.C#;
44、统计每门课程的学生选修人数(超过10人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,查询结果按人数降序排列,若人数相同,按课程号升序排列
select C# as 课程号,count(*) as 人数
from sc
group by C#
order by count(*) desc,c#
45、检索至少选修两门课程的学生学号
select S#
from sc
group by s#
having count(*) > = 2
46、查询全部学生都选修的课程的'课程号和课程名
select C#,Cname
from Course
where C# in (select c# from sc group by c#)
47、查询没学过“叶平”老师讲授的任一门课程的学生姓名
select Sname from Student where S# not in (select S# from Course,Teacher,SC where Course.T#=Teacher.T# and SC.C#=course.C# and Tname='叶平');
48、查询两门以上不及格课程的同学的学号及其平均成绩
select S#,avg(isnull(score,0)) from SC where S# in (select S# from SC where score<60 group="" by="" having="">2)group by S#;
49、检索“004”课程分数小于60,按分数降序排列的同学学号
select S# from SC where C#='004'and score<60 order by score desc;
50、删除“002”同学的“001”课程的成绩
from Sc where S#='001'and C#='001';
一、SQL语言简介
1、SQL语言简介
SQL是结构化查询语言(Structured Query Language),是用于访问和处理数据库的标准的计算机语言。
SQL语言的功能如下:
A、SQL面向数据库执行查询
B、SQL可从数据库取回数据
C、SQL可在数据库中插入新的记录
D、SQL可更新数据库中的数据
E、SQL可从数据库删除记录
F、SQL可创建新数据库
G、SQL可在数据库中创建新表
H、SQL可在数据库中创建存储过程
I、SQL可在数据库中创建视图
J、SQL可以设置表、存储过程和视图的权限
SQL是一门ANSI的标准计算机语言,用来访问和操作数据库系统。SQL语句用于取回和更新数据库中的数据。SQL可与数据库程序协同工作,比如MS Access、DB2、Informix、MS SQL Server、Oracle、MySQL、Sybase以及其他数据库系统。
每一种数据库有自己版本的SQL语言,但是为了与ANSI标准相兼容,SQL必须以相似的方式共同地来支持一些主要的关键词(比如 SELECT、UPDATE、DELETE、INSERT、WHERE等等)。
除了SQL标准之外,大部分SQL数据库程序都拥有自己的私有扩展。
2、SQL语言分类
SQL语言分为数据定义语言、数据控制语言、数据操作语言、数据查询语言,分别实现对数据库数据操作。
二、SQL语言基础
1、数据定义语言(DDL)
DDL:Data Definition Language
用于定义和管理数据对象,包括数据库、数据表、函数、视图、索引、触发器等。例如:CREATE、DROP、ALTER等语句。
create table student
(
sid INT,
sname var20)
);
alter table student add age int default 20;
student;
drop database student;
2、数据控制语言(DCL)
DCL:Data Control Language
用来管理数据库的语言,包含授权用户访问、拒绝用户访问、撤销授予的权限。例如:GRANT、DENY、REVOKE、COMMIT、ROLLBACK等语句。
创建用户
create user ‘wang’@‘localhost’ identified by ‘a1!’;
权限设置
grant select on db.student to ‘wang’@‘localhost’;
撤销权限
revoke select on db.student from ‘wang’@‘localhost’;
3、数据操作语言(DML)
DML:Data Manipulation Language
用于操作数据库对象中所包含的数据,增、删、改。例如:INSERT、DELETE、UPDATE语句。
4、数据查询语言(DQL)
DQL:Data Query Language
用于查询数据库对象中所包含的数据,能够进行单表查询、连接查询、嵌套查询,以及集合查询等各种复杂程度不同的数据库查询,并将数据返回到客户机中显示。例如:SELECT语句。
三、常量和变量
1、常量
A、字符常量
字符串常量使用单引号或双引号,数值常量不用加引号。
如果字符串常量中需要换行、有单引号、双引号 % _
前面需要加转义字符
换行
’ 一个单引号
” 一个双引号
一个 如果没有转义字符 就认为是一个转义字符
% 一个% 如果没有转义字符就认为这是一个通配符
_ 一个_ 如果没有转移字符 就认为是一个通配符
select ‘hanli’gang001’
select ‘han ligang001’
select ‘han ligang001’
select “han"ligang001”
select “韩立刚001”
B、数值常量
数值常量不用添加引号,
select 100+100+200
C、布尔常量
布尔型常量取值 true 和 false
在SQL中使用1和0表示
select true,false
在表达式中
select 100>200
select 100<200
2、变量
用户自定义变量使用@开始,使用set给变量赋值。
set @name=‘孙悟空’;
select @name;
select * from student;
into student values (6,‘孙悟空’,20);
into student values (8,@name,20);
set @sid=9,@nid=10
into student values (@sid,@name,20);
select @sid+@nid;
set @sid=@sid+1;
select @sid;
set @sname3=(select sname from student where sid=9);
select @sname3;
3、系统变量
系统变量分为全局系统变量和会话系统变量。
全局系统变量:针对所有默认设置
会话系统变量:针对当前用户生效,用户登录MySQL会使用全局系统变量,如果会话中更改了变量值,使用更改后的值,不过只针对当前用户生效。
show variables 显示会话系统变量
show global variables 显示全局系统变量
show session variables 显示会话系统变量
show global variables like ‘sql_select_limit’;使用通配符显示匹配的变量设置
show session variables like ‘sql_select_limit’;系统变量使用@@标识
select @@global.sql_select_limit 查看某个全局系统变量设置
select @@session.sql_select_limit 查看某个会话系统变量设置
set @@session.sql_select_limit=2 设置会话系统变量
全局系统变量需要在/etc/my.cnf配置文件中修改。
</score;
sql数据库原理
1)SQL模式:SQL模式是表和授权的静态定义。 一个SQL模式定义为基本表的集合。 一个由模式名和模式拥有者的用户名或账号来确定, 并包含模式中每一个元素(基本表、视图、索引等)的定义。 (2)SQL数据库:SQL(Structured Query Language),即‘结构式查询语言’, 采用英语单词表示和结构式的语法规则。 一个SQL数据库是表的汇集,它用一个或多个SQL模式定义。 (3)基本表:在SQL中, 把传统的关系模型中的关系模式称为基本表(Base Table)。 基本表是实际存储在数据库中的表,对应一个关系。 (4)存储文件:在SQL中, 把传统的关系模型中的存储模式称为存储文件(Stored File)。 每个存储文件与外部存储器上一个物理文件对应。 (5)视图:在SQL中,把传统的关系模型中的子模式称为视图( View),视图是从若干基本表和(或)其他视图构造出来的表。 (6)行:在SQL中,把传统的关系模型中的元组称为行( row)。 (7)列:在SQL中,把传统的关系模型中的属性称为列( coloumn)。 (8)实表:基本表被称为“实表”, 它是实际存放在数据库中的表。 (9)虚表:视图被称为“虚表”,创建一个视图时, 只把视图的定义存储在数据词典中,而不存储视图所对应的数据。 (10)相关子查询:在嵌套查询中出现的符合以下特征的子查询: 子查询中查询条件依赖于外层查询中的某个值, 所以子查询的处理不只一次,要反复求值,以供外层查询使用。 (11)联接查询:查询时先对表进行笛卡尔积操作, 然后再做等值联接、选择、投影等操作。 联接查询的效率比嵌套查询低。 (12)交互式SQL: 在终端交互方式下使用的SQL语言称为交互式SQL。 (13)嵌入式SQL: 嵌入在高级语言的程序中使用的SQL语言称为嵌入式SQL。 (14)共享变量:SQL和宿主语言的接口。 共享变量有宿主语言程序定义, 再用SQL的DECLARE语句说明, SQL语句就可引用这些变量传递数据库信息。 (15)游标:游标是与某一查询结果相联系的符号名, 用于把集合操作转换成单记录处理方式。 (16)卷游标:为了克服游标在推进时不能返回的不便, SQL2提供了卷游标技术。 卷游标在推进时不但能沿查询结果中元组顺序从头到尾一行行推进, 也能一行行返回。
包括:关系模型的基本原理、结构化查询语言(SQL)、数据建模、数据库设计、数据库管理、Web数据库处理。
SQL Server数据库基础知识第一讲:数据库1、什么是数据库?2、数据库的主要功能是什么?3、常用的数据库管理软件有哪些?
学sql需要什么基础
学习SQL需要一些基础知识,首先需要了解关系型数据库的概念和基本原理。其次,需要熟悉数据库管理系统(DBMS)的安装和配置。还需要掌握基本的数据库操作,包括创建表、插入数据、更新和删除数据等。理解SQL语言的基本语法和常用操作,如SELECT、INSERT、UPDATE和DELETE语句也是必要的。此外,了解数据表的设计和规范化,以及索引和查询优化等内容也很重要。最后,对于编程基础和逻辑思维能力的提升也有帮助。
SQL Server 连接基础知识
引言
该堆栈的顶部是 API 或对象库层 应用程序通过对象库公开的 API 函数或接口连接到 Microsoft? SQL Server 用于访问 SQL Server 的 API 示例包括 ODBC 和 DB Library 用于访问 SQL Server 的对象库示例包括 OLE DB ADO 和 ADO NET 由于 ADO 最终使用 OLE DB 与服务器通信 因此 Windows 应用程序在与 SQL Server 通信时实际上只使用两个常用的对象库 即 OLE DB 和 ADO NET 由于通过 ADO 或 ADO NET 进行连接通常比通过 ODBC 进行连接更普遍(但 SQL Server 的查询分析器和企业管理器仍通过 ODBC 进行连接) 因此本文将从 ADO/OLE DB 和 ADO NET 的角度介绍 SQL Server 连接体系结构的客户端 如今 大多数应用程序均通过对象库(而非 ODBC 或类似 API)连接到 SQL Server
ADO 和 OLE DB
OLE DB 客户端(也称作使用者)通过客户端提供程序与服务器以及其他后端程序进行通信 此提供程序是一组 组件(一个或多个) 用于将应用程序请求转换为网络进程间通信 (IPC) 请求 在使用 SQL Server 的情况下 最常用的 OLE DB 提供程序是 SQLOLEDB 它是 Microsoft 为 SQL Server 提供的 OLE DB 提供程序 SQLOLEDB 随附于 SQL Server 中 并作为 Microsoft 数据访问组件 (MDAC) 库的一部分安装
为了使用 ADO 与 SQL Server 进行通信 应用程序首先使用 Connection 对象建立与服务器的连接 ADO 的 Connection 对象接受一个连接字符串 该字符串指定要使用的 OLE DB 提供程序以及传递给它的参数 如果应用程序使用 SQLOLEDB 提供程序连接到 SQL Server 则该字符串中将显示 SQLOLEDB
ADO 应用程序还可以通过 ODBC 连接到 SQL Server 为此 应用程序将使用适用于 ODBC 的 OLE DB 提供程序 并指定在其连接字符串中引用目标 SQL Server 的 ODBC 数据源 这种情况下 应用程序与 OLE DB 进行通信 同时 ODBC 的 OLE DB 提供程序调用相应的 ODBC API 以便与 SQL Server 进行会话
ADO NET
ADO NET 应用程序通常使用 NET Framework Data Provider for SQL Server 连接到 SQL Server 该本机提供程序使 ADO NET 对象能够与 SQL Server 直接进行通信 通常 应用程序使用 SqlConnection 对象建立连接 然后使用 SqlCommand 对象向服务器发送命令 并接收服务器返回的结果 SqlDataAdapter 和 SqlDataReader 类通常与 SqlCommand 一起使用 以便通过托管的代码应用程序与 SQL Server 进行交互
通过 OleDbConnection 类 ADO NET 应用程序还可以使用 SQLOLEDB OLE DB 提供程序与 SQL Server 进行交互 此外 它们可以通过 OdbcConnection 类使用 ODBC 访问 SQL Server 因此 仅通过托管代码 您就有三种不同的方法从应用程序访问 SQL Server 从故障排除的角度而言 了解这些方法是非常有用的 因为它可以帮助您将遇到的与连接相关的问题归结到特定的数据访问层或库
客户端 Net Library
该堆栈中的下一层是 Net Library Net Library 在 API 或对象库(应用程序使用它与 SQL Server 进行通信)与网络协议(用于与网络交换数据)之间提供了一个通道 SQL Server 为所有主要的网络协议提供了 Net Library 这些库以透明方式将客户端发出的请求发送到 SQL Server 并将服务器发出的响应返回给客户端 可以使用 SQL Server 的客户端网络实用程序配置适用于特定客户端的 Net Library 支持的客户端协议包括 TCP/IP 命名管道 NWLink 多协议 (RPC) 和其他一些协议
尤其值得一提的 Net Library 是共享内存 Net Library 顾名思义 该 Net Library 使用 Windows 的共享内存功能在 SQL Server 客户端与服务器之间进行通信 显然 这意味着客户端与服务器必须位于同一台物理计算机上
由于它能够绕过物理网络堆栈 因此共享内存 Net Library 要比其他 Net Library 快得多 对共享内存区域的访问受到同步对象的保护 因此客户端与服务器之间的通信速度主要受限于 Windows 对内核对象进行调度的能力 以及进程与共享内存区域之间进行数据复制的能力
可以在连接时将某个时间段或(本地)指定为您的计算机名 来指示使用共享内存 Net Library 也可以在连接时为计算机\实例名加上前缀 lpc: 来指示要使用共享内存 Net Library
注意 即使连接到同一台计算机上的 SQL Server 共享内存 Net Library 也未必就是最佳的连接选项 在某些情况下 客户端与服务器之间的直接连接可能限制它的扩展性 与应用程序整体体系结构中的其他元素一样 应始终对给定技术解决方案进行全面的测试 然后才能判断它是否有良好的扩展性以及是否比其他方法更快
连接
客户端进行连接时 SQL Server 的用户模式计划程序 (UMS) 组件将它指定给特定的计划程序 启动时 SQL Server 为系统上的每个 CPU 创建一个单独的 UMS 计划程序 当客户端连接到服务器时 这些客户端将指定给具有最少连接数的计划程序 连接后 客户端将不会更换计划程序 它将始终受到指定计划程序的控制 直到连接断开
这对与服务器建立多个连接的应用程序很重要 如果应用程序性能较差 或无法在它的多个连接上平均分配工作 则在该应用程序的某些连接之间可能造成不必要的 CPU 资源争用 而其他连接实际上却处于空闲状态
例如 应用程序与双处理器计算机上运行的 SQL Server 建立了四个连接 连接 和 隶属于处理器 连接 和 隶属于处理器 如果应用程序的大部分工作通过连接 和 执行 则这两个连接将争用 CPU 而 CPU 实际上可能仍处于空闲状态 这种情况下 应用程序只能断开某些连接或重新连接某些连接 并希望连接 和 隶属于不同的 CPU (连接时无法指定处理器隶属关系) 或在它的连接上重新分配工作负荷 以便每个连接的工作负荷更加均衡 当然 后一种情况要远好于前一种情况
连接内存
SQL Server 为客户端请求的每个连接保留三个数据包缓冲区 每个缓冲区的大小取决于 sp_configure 存储过程指定的默认网络数据包大小 如果默认网络数据包大小小于 KB 则这些数据包的内存将由 SQL Server 的缓冲池提供 否则 该内存将由 SQL Server 的 MemToLeave 区域分配
值得一提的是 NET Framework Data Provider for SQL Server 的默认网络数据包大小为 KB 因此 与托管代码客户端连接关联的缓冲区通常由 SQL Server 的 MemToLeave 区域提供 而典型的 ADO 应用程序却不同 它们的默认数据包大小为 KB 因此缓冲区将由 SQL Server 缓冲池分配
事件
连接后的客户端请求通常分为两种广泛类别 语言事件和远程过程调用 尽管还存在其他类别 但大多数由 SQL Server 客户端发送到服务器的请求由以下两种类型之一构成 语言事件是从客户端发送到服务器的 一组 T SQL 例如 如果调用 ADO Command 对象(其 CommandText 属性设置为 T SQL 查询 CommandType 属性设置为 adCmdText)的 Execute 方法 则查询将作为语言事件提交给服务器 同样 如果将 CommandType 设置为 adCmdTable 并调用 Execute 方法 则 ADO 将生成一个内部查询(它将选择 CommandText 属性标识的表中的所有列) 并将它作为语言事件提交给服务器 另一方面 如果将 CommandType 设置为 adStoredProc 则调用 Execute 将使 ADO 向服务器提交一个远程过程调用请求 以执行 CommandText 属性中列出的存储过程
为何要关心将请求作为语言事件还是作为 RPC 提交给服务器呢?通常 这是因为 RPC 的功能更为出色 特别是在重复调用具有不同筛选值的同一查询时 尽管 SQL Server 可以自动将普通的语言事件请求参数化 但这种能力非常有限 它从不尝试自动将某些类型的查询参数化 这可能会导致基本相同的查询产生不同的执行 从而只因为这些不同的执行提供不同的值 而导致在服务器上白白浪费计划编译的成本 这通常不是您所希望的结果 您希望针对查询的第一次执行编译一个新的计划 然后将该计划重复用于具有不同参数的执行
而 RPC 则通过显式参数化查询(而不是依赖服务器参数化查询)来支持计划重复使用 为过程的第一次执行生成一个计划后 随后的执行将自动重复使用该计划 即使它们提供的参数值不同 与通过语言事件调用存储过程相比 使用 RPC 调用存储过程不仅节省了计划编译所需的执行时间和 CPU 资源 还增强了 SQL Server 内存资源的利用率 因为它避免了冗余执行计划所浪费的内存
在执行动态 T SQL 时 通常首选 sp_executesql 而不是 EXEC() 也出于同样的原因 Sp_executesql 的工作方式是 使用指定的查询创建一个存储过程 然后使用提供的参数调用它 与 EXEC() 不同 sp_executesql 提供了一个允许您参数化动态 T SQL 并支持计划重复使用的机制 使用 sp_executesql 执行的动态查询比使用 EXEC() 的查询能够在更大程度上避免不必要的编译和资源消耗
TDS
从客户端发送到 SQL Server 的 RPC 语言事件和其他类型的请求被格式化为称作表格数据流 (TDS) 的 SQL Server 特定数据格式 TDS 是 SQL Server 客户端和服务器之间使用的 语言 对于它的确切格式将不作介绍 但是 如果客户端要与 SQL Server 进行通信 就必须使用 TDS
目前 SQL Server 支持三种版本的 TDS TDS (适用于 SQL 客户端) TDS (适用于 SQL Server 客户端)和 TDS (适用于 SQL Server 和 客户端) 完全支持所有 SQL Server 功能的版本只有 TDS 其他版本保持向后兼容
服务器端 Net Library
数据库基础详解:存储过程、视图、游标、SQL语句优化以及索引
写在文章前:本系列文章用于博主自己归纳复习一些基础知识,同时也分享给可能需要的人,因为水平有限,肯定存在诸多不足以及技术性错误,请大佬们及时指正。
存储过程 是事先经过编译并存储在数据库中的一段SQL语句的集合。想要实现相应的功能时,只需要调用这个存储过程就行了(类似于函数,输入具有输出参数)。
优点 :
缺点 :
Delete用来删除表的全部或者部分数据,执行delete之后,用户需要提交之后才会执行,会触发表上的DELETE触发器(包含一个OLD的虚拟表,可以只读访问被删除的数据),DELETE之后表结构还在,删除很慢,一行一行地删,因为会记录日志,可以利用日志还原数据;
Truncate删除表中的所有数据,这个操作不能回滚,也不会触发这个表上的触发器。操作比DELETE快很多(直接把表drop掉,再创建一个新表,删除的数据不能找回)。如果表中有自增(AUTO_INCREMENT)列,则重置为1。
Drop命令从数据库中删除表,所有的数据行,索引和约束都会被删除。不能回滚,不会触发触发器。
触发器(TRIGGER)是由事件(比如INSERT/UPDATE/DELETE)来触发运行的操作(不能被直接调用,不能接收参数)。在数据库里以独立的对象存储,用于保证数据完整性(比如可以检验或转换数据)。
约束(Constraint)类型:
从数据库的基本表中通过查询选取出来的数据组成的虚拟表(数据库中只存放视图的定义,而不存放视图的数据)。可以对其进行增/删/改/查等操作。视图是对若干张基本表的引用,一张虚表,查询语句执行的结果,不存储具体的数据(基本表数据发生了改变,视图也会跟着改变)。
可以跟基本表一样,进行增删改查操作( 增删改操作有条件限制,一般视图只允许查询操作 ),对视图的增删改也会影响原表的数据。 它就像一个窗口,透过它可以看到数据库中自己感兴趣的数据并且操作它们。 好处:
用于定位在查询返回的结果集的特定行,以对特定行进行操作。使用游标可以方便地对结果集进行移动遍历,根据需要滚动或对浏览/修改任意行中的数据。主要用于交互式应用。它是一段私有的SQL工作区,也就是一段内存区域,用于暂时存放受SQL语句影响的数据,简单来说,就是将受影响的数据暂时放到了一个内存区域的虚表当中,这个虚表就是游标。
游标是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。即游标用来逐行读取结果集。游标充当指针的作用。尽管游标能遍历结果中的所有行,但他一次只指向一行。
游标的一个常见用途就是保存查询结果,以便以后使用。游标的结果集是由SELECT语句产生,如果处理过程需要重复使用一个记录集,那么创建一次游标而重复使用若干次,比重复查询数据库要快的多。通俗来说,游标就是能在sql的查询结果中,显示某一行(或某多行)数据,其查询的结果不是数据表,而是已经查询出来的结果集。
简单来说:游标就是在查询出的结果集中进行选择性操作的工具。
让缓存更高效。对于连接查询,如果其中一个表发生变化,那么整个查询缓存就无法使用。而分解后的多个查询,即使其中一个表发生变化,对其它表的查询缓存依然可以使用。分解成多个单表查询,这些单表查询的缓存结果更可能被其它查询使用到,从而减少冗余的查询。减少锁竞争。
索引是对数据库表中一列或多列的值进行排序的一种结构(说明是在列上建立的),使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。索引的一个主要目的就是加快检索表中数据,亦即能协助信息搜索者尽快的找到符合限制条件的记录ID的辅助数据结构。
当表中有大量记录时,若要对表进行查询,第一种搜索信息方式是全表搜索,是将所有记录一一取出,和查询条件进行一一对比,然后返回满足条件的记录,这样做会消耗大量数据库系统时间,并造成大量磁盘I/O操作。第二种就是在表中建立索引,然后在索引中找到符合查询条件的索引值,最后通过保存在索引中的ROWID(相当于页码)快速找到表中对应的记录。
例如这样一个查询:select * from table1 where id=10000。如果没有索引,必须遍历整个表,直到ID等于10000的这一行被找到为止。有了索引之后(必须是在ID这一列上建立的索引),即可在索引中查找。由于索引是经过某种算法优化过的,因而查找次数要少的多。可见,索引是用来定位的。
从应用上分, 主键索引(聚集) , 唯一索引(聚集/非聚集) , 普通索引 , 组合索引 , 单列索引和全文索引
SQL数据库是什么
access是什么--office自带的数据库access是office里面的一个组件。是用来制作简单的数据库。还有的意思就是访问、还有接入的意思。如accesslist访问列表accesspoint接入点在公软件office套件中,最为广大用户熟悉的是word和excel,因为它们功能强大且方便易用,更因为它们不仅可用于公,还可用于个人写作和家庭记帐理财等。同为office套件中一部分的access,虽然有着同样强大的功能,但使用的人却相对少些,不像word和excel那样广泛。事实上,真正用过access的用户,对其强大功能和灵活应用均称赞有加。access数据库管理系统是microsoftoffice套件的重要组成部分,适用于小型商务活动,用以存贮和管理商务活动所需要的数据。access不仅是一个数据库,而且它具有强大的数据管理功能,它可以方便地利用各种数据源,生成窗体(表单),查询,报表和应用程序等。数据库是有结构的数据集合,它与一般的数据文件不同,(其中的数据是无结构的)是一串文字或数字流。数据库中的数据可以是文字、图象、声音等。microsoftaccess是一种关系式数据库,关系式数据库由一系列表组成,表又由一系列行和列组成,每一行是一个记录,每一列是一个字段,每个字段有一个字段名,字段名在一个表中不能重复。图1是一个“产品”表的例子。“产品”表由10个记录组成,一个记录占一行,每一个记录由产品id、产品名称、库存量、订货量、单价和折扣率6个字段组成。“产品id”是字段名,其下面的1,2等是字段的值。表与表之间可以建立关系(或称关联,连接),以便查询相关联的信息。access数据库以文件形式保存,文件的扩展名是mdb。access数据库由六种对象组成,它们是表、查询、窗体、报表、宏和模块。表(table)表是数据库的基本对象,是创建其他5种对象的基础。表由记录组成,记录由字段组成,表用来存贮数据库的数据,故又称数据表。查询(query)查询可以按索引快速查找到需要的记录,按要求筛选记录并能连接若干个表的字段组成新表。窗体(form)窗体提供了一种方便的浏览、输入及更改数据的窗口。还可以创建子窗体显示相关联的表的内容。窗体也称表单。报表(report)报表的功能是将数据库中的数据分类汇总,然后打印出来,以便分析。宏(macro)宏相当于dos中的批处理,用来自动执行一系列操作。access列出了一些常用的操作供用户选择,使用起来十分方便。模块(module)模块的功能与宏类似,但它定义的操作比宏更精细和复杂,用户可以根据自己的需要编写程序。模块使用visualbasic编程
SQL是Structured Quevy Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。在使用它时,只需要发出“做什么”的命令,“怎么做”是不用使用者考虑的。SQL功能强大、简单易学、使用方便,已经成为了数据库操作的基础,并且现在几乎所有的数据库均支持SQL。
##1 二、SQL数据库数据体系结构
SQL数据库的数据体系结构基本上是三级结构,但使用术语与传统关系模型术语不同。在SQL中,关系模式(模式)称为“基本表”(base table);存储模式(内模式)称为“存储文件”(stored file);子模式(外模式)称为“视图”(view);元组称为“行”(row);属性称为“列”(column)。名称对称如^00100009a^:
##1 三、SQL语言的组成
在正式学习SQL语言之前,首先让我们对SQL语言有一个基本认识,介绍一下SQL语言的组成:
1.一个SQL数据库是表(Table)的集合,它由一个或多个SQL模式定义。
2.一个SQL表由行集构成,一行是列的序列(集合),每列与行对应一个数据项。
3.一个表或者是一个基本表或者是一个视图。基本表是实际存储在数据库的表,而视图是由若干基本表或其他视图构成的表的定义。
4.一个基本表可以跨一个或多个存储文件,一个存储文件也可存放一个或多个基本表。每个存储文件与外部存储上一个物理文件对应。
5.用户可以用SQL语句对视图和基本表进行查询等操作。在用户角度来看,视图和基本表是一样的,没有区别,都是关系(表格)。
6.SQL用户可以是应用程序,也可以是终端用户。SQL语句可嵌入在宿主语言的程序中使用,宿主语言有FORTRAN,COBOL,PASCAL,PL/I,C和Ada语言等。SQL用户也能作为独立的用户接口,供交互环境下的终端用户使用。
##1 四、对数据库进行操作
SQL包括了所有对数据库的操作,主要是由4个部分组成:
1.数据定义:这一部分又称为“SQL DDL”,定义数据库的逻辑结构,包括定义数据库、基本表、视图和索引4部分。
2.数据操纵:这一部分又称为“SQL DML”,其中包括数据查询和数据更新两大类操作,其中数据更新又包括插入、删除和更新三种操作。
3.数据控制:对用户访问数据的控制有基本表和视图的授权、完整性规则的描述,事务控制语句等。
4.嵌入式SQL语言的使用规定:规定SQL语句在宿主语言的程序中使用的规则。
下面我们将分别介绍:
##2 (一)数据定义
SQL数据定义功能包括定义数据库、基本表、索引和视图。
首先,让我们了解一下SQL所提供的基本数据类型:(如^00100009b^)
1.数据库的建立与删除
(1)建立数据库:数据库是一个包括了多个基本表的数据集,其语句格式为:
CREATE DATABASE 〔其它参数〕
其中,在系统中必须是唯一的,不能重复,不然将导致数据存取失误。〔其它参数〕因具体数据库实现系统不同而异。
例:要建立项目管理数据库(xmmanage),其语句应为:
CREATE DATABASE xmmanage
(2) 数据库的删除:将数据库及其全部内容从系统中删除。
其语句格式为:DROP DATABASE
例:删除项目管理数据库(xmmanage),其语句应为:
DROP DATABASE xmmanage
2.基本表的定义及变更
本身独立存在的表称为基本表,在SQL语言中一个关系唯一对应一个基本表。基本表的定义指建立基本关系模式,而变更则是指对数据库中已存在的基本表进行删除与修改。
……
你说的大概是这样的:类似于EX数据库的是:Access数据库。那么Access数据库跟sql数据库有什么不一样呢!详解:相同点:1.都是采用关系来设计数据层。2.都可以对数据进行操作。3.都可以对外被利用。...不同点:access采用平面设计原理,只是针对生活中一些小型的关系进行设计,相对于sql来说:比较灵活,容易被理解,那么理所当然的sql比access更加巨大..涵盖的方面也比较远,所进行的操作也更加复杂,具有的作用也就比access更加具有意义。从原理来说:sql 是c/s架构(客户/服务器)模式
accesss 单机数据库
(程序和数据只能在同一台机器上,除了c/s b/s的架构程序)
sql有强大的后台管理系统,备份、用户级别管理、事件、触发器。存储过程。
SQL Server数据库基础知识第一讲:数据库1、什么是数据库?2、数据库的主要功能是什么?3、常用的数据库管理软件有哪些?
SQL是Structured Query Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。在使用它时,只需要发出“做什么”的命令,“怎么做”是不用使用者考虑的。
SQL数据库的数据体系结构基本上是三级结构,但使用术语与传统关系模型术语不同。在SQL中,关系模式(模式)称为"基本表"(base table);存储模式(内模式)称为"存储文件"(stored file);子模式(外模式)称为"视图"(view);元组称为"行"(row);属性称为"列"(column)。
扩展资料:
SQL数据库的优点:
1、易用性高:
适合分布式组织的可伸缩性、用于决策支持的数据仓库功能、与许多其他服务器软件紧密关联的集成性、良好的性价比等。
2. 为数据管理与分析带来了灵活性:
允许单位在快速变化的环境中从容响应,从而获得竞争优势。从数据管理和分析角度看,将原始数据转化为商业智能和充分利用Web带来的机会非常重要。作为一个完备的数据库和数据分析包,SQLServer为快速开发新一代企业级商业应用程序、为企业赢得核心竞争优势打开了胜利之门。
参考资料来源:百度百科-SQL数据库