第一篇:Oracle 10g学习笔记(三)——SQL语言基础1
content:
SQL语言概述、分类
各种语言常见语句写法
常用查询语句的使用
常用系统函数及其应用
分组语句
模糊查询
表的连接
子查询
结构化查询语言是学好任何一个关系型数据库的前提 语言分类
数据定义语言DDL
CREATE 创建表 创建数据库 创建函数 创建过程 CREATE TABLE abc(a varchar2(10), b char(10));ALTER 修改表的结构
ALTER TABLE abc ADD c number;
DROP 删除表 删除字段 删除数据库
DROP TABLE abc;
删除一个字段
ALTER TABLE abc DROP COLUMN c;
数据控制语言DCL
GRANT
把scott用户的dept表授权给tt用户
GRANT SELECT ON dept TO tt;
SELECT * FROM scott.dept;
REVOKE
解除授权
REVOKE SELECT ON dept FROM tt;
数据操纵语言DML
SELECT
SELECT * FROM dept;
INSERT
INSERT INTO abc(a,b)VALUES('ABC','XY');
赋值个数和字段个数必须相等,且对应数据类型要相同
DELETE
清空表的所有数据
DELETE FROM abc
DELETE FROM abc WHERE a='abc';
UPDATE
UPDATE abc SET b='ttt';
UPDATE abc SET b='yyy' WHERE a='abc';
常用的系统函数
1、字符
length,ltrim,replace,rtrim,substr,trim
查看ABCDEFG包含几个字符
SELECT LENGTH('ABCDEFG')FROM dual;
查看ABCDEF汉字包含几个字符
SELECT LENGTH('ABCDEF汉字')FROM dual;
查看字节数
SELECT LENGTHB('ABCDEF汉字')FROM dual;
去掉左边空格
SELECT LTRIM(' ABCD')FROM dual;
去掉右边空格字符(空字符串)
SELECT RTRIM('ABCD ')FROM dual;
去掉左右空格字符
SELECT TRIM(' ABCD')FROM dual;
可变长字段varchar和定长字段char区别:
可变长字段可以节省未用到的空间
定长字段占用字段空间,未用到的使用空格填充,取定长字段时最好结合使用TRIM函数
定义字符型字段尽可能定义成可变长字段,避免不必要的存储,有利于数据的正确查询截取字符串
SELECT SUBSTR('abcdefgh',2,3)FROM dual;
左取3个
SELECT SUBSTR('abcdefgh',1,3)FROM dual;
右取3个
SELECT SUBSTR('abcdefgh',LENGTH('abcdefgh'-3+1,3)FROM dual2、日期
sysdate,current_date,next_day
查看系统时间
SELECT sysdate FROM dual;
设定时间格式
ALTER SESSION SET NLS_DATE_FORMAT='dd-mon-yyyy hh:mi:ss';SELECT CURRENT_DATE FROM dual;
查看某日期后的星期几是几号
SELECT NEXT_DAY(sysdate,'星期三')FROM dual;
3、转换
to_char,to_date,to_number
将日期转换成字符
SELECT sysdate FROM dual;
SELECT TO_CHAR(sysdate,'yyyy-mm-dd hh24:mi:ss')FROM dual;将字符转换成日期
SELECT TO_DATE('12-3月-08)FROM dual;
将字符转换成数字
SELECT TO_NUMBER('22')FROM dual;
4、聚集函数
sum,svg,min,max,count,decode,nvl
求和
SELECT sum(price)FROM books;
求平均值
SELECT avg(price)FROM books;
查看某个字段的行数,当某个字段为空值时将不被统计
SELECT COUNT(price)FROM books;
查看表记录行数
SELECT COUNT(*)FROM books;
聚集函数多为条件但不能与where语句结合SELECT * FROM books WHERE price>20;
SELECT user FROM dual;
decode函数为同值字段计数
SELECT SUM(DECODE(SEX,'男',1,0))男人数, SUM(DECODE(SEX,'女',1,0))女人数 FROM member;
空值处理
为空值做标识 使用函数处理空值
SELECT a1, nvl(a2,'未输入')a2 FROM member;
SELECT * FROM aa WHERE a2 IS NULL;
SELECT * FROM aa WHERE a2 IS NOT NULL;
升序排列
SELECT * FROM aa ORDER BY a1 ASC
降序排列
SELECT * FROM aa ORDER BY a1 DESC
让重复数据只显示其中一条,不影响数据库的值 SELECT DISTINCT a1 FROM aa;
显示全部数据(SELECT默认查询效果)SELECT ALL a1 FROM aa;
第二篇:sql语言学习
SQL语言学习
--语 句功 能
--数据操作
SELECT--从数据库表中检索数据行和列 INSERT--向数据库表添加新数据行
DELETE--从数据库表中删除数据行
UPDATE--更新数据库表中的数据
--数据定义
CREATE TABLE--创建一个数据库表
DROP TABLE--从数据库中删除表
ALTER TABLE--修改数据库表结构
CREATE VIEW--创建一个视图
DROP VIEW--从数据库中删除视图
CREATE INDEX--为数据库表创建一个索引 DROP INDEX--从数据库中删除索引
CREATE PROCEDURE--创建一个存储过程
DROP PROCEDURE--从数据库中删除存储过程 CREATE TRIGGER--创建一个触发器
DROP TRIGGER--从数据库中删除触发器
CREATE SCHEMA--向数据库添加一个新模式 DROP SCHEMA--从数据库中删除一个模式 CREATE DOMAIN--创建一个数据值域 ALTER DOMAIN--改变域定义
DROP DOMAIN--从数据库中删除一个域--数据控制
GRANT--授予用户访问权限
DENY--拒绝用户访问
REVOKE--解除用户访问权限
--事务控制
COMMIT--结束当前事务
ROLLBACK--中止当前事务
SET TRANSACTION--定义当前事务数据访问特征--程序化SQL
DECLARE--为查询设定游标
EXPLAN--为查询描述数据访问计划
OPEN--检索查询结果打开一个游标
FETCH--检索一行查询结果
CLOSE--关闭游标
PREPARE--为动态执行准备SQL 语句 EXECUTE--动态地执行SQL 语句
DESCRIBE--描述准备好的查询
---局部变量
declare @id char(10)
--set @id = '10010001'
select @id = '10010001'
---全局变量
---必须以@@开头
--IF ELSE
declare @x int @y int @z int
select @x = 1 @y = 2 @z=3
if @x > @y
print 'x > y'--打印字符串'x > y'
else if @y > @z
print 'y > z'
else print 'z > y'
--CASE
use pangu
update employee
set e_wage =
case
when job_level = ’1’ then e_wage*1.08
when job_level = ’2’ then e_wage*1.07
when job_level = ’3’ then e_wage*1.06
else e_wage*1.05
end
--WHILE CONTINUE BREAK
declare @x int @y int @c int
select @x = 1 @y=1
while @x < 3
begin
print @x--打印变量x 的值
while @y < 3
begin
select @c = 100*@x + @y
print @c--打印变量c 的值
select @y = @y + 1
end
select @x = @x + 1
select @y = 1
end
--WAITFOR
--例 等待1 小时2 分零3 秒后才执行SELECT 语句
waitfor delay ’01:02:03’
select * from employee
--例 等到晚上11 点零8 分后才执行SELECT 语句
waitfor time ’23:08:00’
select * from employee
***SELECT***
select *(列名)from table_name(表名)where column_name operator value
ex:(宿主)
select * from stock_information where stockid= str(nid)
stockname = 'str_name'
stockname like '% find this %'
stockname like '[a-zA-Z]%'---------([]指定值的范围)
stockname like '[^F-M]%'---------(^排除指定范围)
---------只能在使用like关键字的where子句中使用通配符)
or stockpath = 'stock_path'
or stocknumber < 1000
and stockindex = 24
not stocksex = 'man'
stocknumber between 20 and 100
stocknumber in(10,20,30)
order by stockid desc(asc)---------排序,desc-降序,asc-升序
order by 1,2---------by列号
stockname =(select stockname from stock_informationwhere stockid= 4)
---------子查询
---------除非能确保内层select只返回一个行的值,---------否则应在外层where子句中用一个in限定符
select distinct column_name form table_name---------distinct指定检索独有的列值,不重复select stocknumber ,“stocknumber + 10” = stocknumber + 10 from table_name
select stockname , “stocknumber” = count(*)from table_name group by stockname
---------group by 将表按行分组,指定列中有相同的值
having count(*)= 2---------having选定指定的组
select *
from table1, table2
where table1.id *= table2.id--------左外部连接,table1中有的而table2中没有得以null表示table1.id =* table2.id--------右外部连接
select stockname from table1
union [all]-----union合并查询结果集,all-保留重复行
select stockname from table2
***insert***
insert into table_name(Stock_name,Stock_number)value(“xxx”,“xxxx”)
value(select Stockname , Stocknumber from Stock_table2)---value为select语句
***update***
update table_name set Stockname = “xxx” [where Stockid = 3]
Stockname = default
Stockname = null
Stocknumber = Stockname + 4
***delete***
delete from table_name where Stockid = 3
truncate table_name-----------删除表中所有行,仍保持表的完整性
drop table table_name---------------完全删除表
***alter table***---修改数据库表结构
alter table database.owner.table_name add column_name char(2)null.....sp_help table_name----显示表已有特征
create table table_name(name char(20), age smallint, lname varchar(30))
insert into table_name select.........-----实现删除列的方法(创建新表)
alter table table_name drop constraint Stockname_default----删除Stockname的default约束
***function(/*常用函数*/)***
----统计函数----
AVG--求平均值
COUNT--统计数目
MAX--求最大值
MIN--求最小值
SUM--求和
--AVG
use pangu
select avg(e_wage)as dept_avgWage
from employee
group by dept_id
--MAX
--求工资最高的员工姓名
use pangu
select e_name
from employee
where e_wage =
(select max(e_wage)
from employee)
--STDEV()
--STDEV()函数返回表达式中所有数据的标准差
--STDEVP()
--STDEVP()函数返回总体标准差
--VAR()
--VAR()函数返回表达式中所有值的统计变异数
--VARP()
--VARP()函数返回总体变异数
----算术函数----
/***三角函数***/
SIN(float_expression)--返回以弧度表示的角的正弦
COS(float_expression)--返回以弧度表示的角的余弦
TAN(float_expression)--返回以弧度表示的角的正切
COT(float_expression)--返回以弧度表示的角的余切
/***反三角函数***/
ASIN(float_expression)--返回正弦是FLOAT 值的以弧度表示的角
ACOS(float_expression)--返回余弦是FLOAT 值的以弧度表示的角
ATAN(float_expression)--返回正切是FLOAT 值的以弧度表示的角
ATAN2(float_expression1,float_expression2)
--返回正切是float_expression1 /float_expres-sion2的以弧度表示的角
DEGREES(numeric_expression)
--把弧度转换为角度返回与表达式相同的数据类型可为
--INTEGER/MONEY/REAL/FLOAT 类型
RADIANS(numeric_expression)--把角度转换为弧度返回与表达式相同的数据类型可为
--INTEGER/MONEY/REAL/FLOAT 类型
EXP(float_expression)--返回表达式的指数值
LOG(float_expression)--返回表达式的自然对数值
LOG10(float_expression)--返回表达式的以10 为底的对数值
SQRT(float_expression)--返回表达式的平方根
/***取近似值函数***/
CEILING(numeric_expression)--返回>=表达式的最小整数返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT 类型
FLOOR(numeric_expression)--返回<=表达式的最小整数返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT 类型
ROUND(numeric_expression)--返回以integer_expression 为精度的四舍五入值返回的数据--类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型
ABS(numeric_expression)--返回表达式的绝对值返回的数据类型与表达式相同可为
--INTEGER/MONEY/REAL/FLOAT 类型
SIGN(numeric_expression)--测试参数的正负号返回0 零值1 正数或-1 负数返回的数据类型--与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型
PI()--返回值为π 即3.14***936
RAND([integer_expression])--用任选的[integer_expression]做种子值得出0-1 间的随机浮点数----字符串函数----
ASCII()--函数返回字符表达式最左端字符的ASCII 码值
CHAR()--函数用于将ASCII 码转换为字符
--如果没有输入0 ~ 255 之间的ASCII 码值CHAR 函数会返回一个NULL 值
LOWER()--函数把字符串全部转换为小写
UPPER()--函数把字符串全部转换为大写
STR()--函数把数值型数据转换为字符型数据
LTRIM()--函数把字符串头部的空格去掉
RTRIM()--函数把字符串尾部的空格去掉
LEFT(),RIGHT(),SUBSTRING()--函数返回部分字符串
CHARINDEX(),PATINDEX()--函数返回字符串中某个指定的子串出现的开始位置
SOUNDEX()--函数返回一个四位字符码
--SOUNDEX函数可用来查找声音相似的字符串但SOUNDEX函数对数字和汉字均只返回0 值DIFFERENCE()--函数返回由SOUNDEX 函数返回的两个字符表达式的值的差异
--0 两个SOUNDEX 函数返回值的第一个字符不同
--1 两个SOUNDEX 函数返回值的第一个字符相同
--2 两个SOUNDEX 函数返回值的第一二个字符相同
--3 两个SOUNDEX 函数返回值的第一二三个字符相同
--4 两个SOUNDEX 函数返回值完全相同
QUOTENAME()--函数返回被特定字符括起来的字符串
/*select quotename('abc', '{')quotename('abc')
运行结果如下
---{
{abc} [abc]*/
REPLICATE()--函数返回一个重复character_expression 指定次数的字符串 /*select replicate('abc', 3)replicate('abc',-2)
运行结果如下
----------------------
abcabcabc NULL*/
REVERSE()--函数将指定的字符串的字符排列顺序颠倒
REPLACE()--函数返回被替换了指定子串的字符串
/*select replace('abc123g', '123', 'def')
运行结果如下
----------------------
abcdefg*/
SPACE()--函数返回一个有指定长度的空白字符串
STUFF()--函数用另一子串替换字符串指定位置长度的子串
第三篇:SQL学习基础篇
创建数据库:
CREATE DATABASE TEST_ABC;说明:(可以采用大写也可以采用小写,SQL语句本身不区分大小写,创建完毕之 后需要用英文分号;来结尾,TEST_ABC是数据库名字的代表)。
进入数据库:
use TEST_ABC;说明:只有当创建好数据库之后,进入数据库,才能创建table(表)。创建表:
create table food_list(food_name varchar(10),food_price int(5));
说明:(table代表的是表,table之后的就是表的名字,名字之后用括 号(英文格式括起来),然后穿件的就是表的列的名字如food_name和 food_price,varchar和int代表的是这两个的数据类型,其后括号里 面的数字表示的是可以接受的最大字符数,最后用分号结束整个表的创 建过程。)
检查表:
desc food_list;
说明:desc是describe的缩写。
删除表:
drop table food_list;
插入值:
insert into food_list(food_name,food_price)values('铁板鱿鱼','200');
说明:insert into表示插入,插入的某个数据库中的表中的相应的值,第一个括弧之内的为每一列的名字,但是可以只是部分列的名字,而相 应的第二个括弧之内的为第一个括弧之内的列相对应的值,不可多也不 可少。中间用values来连接。
查找:
select * from food_list;
select * from food_list where food_name='铁板鱿鱼';select food_name,food_price from food_list wherefood_name='红烧豆腐';
select food_name,food_price from food_list wherefood_name='红烧豆腐'and food_name='手抓羊肉' orfood_name='鸡腿排骨' or food_price<20;
select * from food_list where food_price between 5and 20;
select food_name from food_list where food_namein('碳烤鱼','铁板鱿鱼','红烧肉','辣子鸡丁','烤龙虾');
说明1: select是选择,from表示从指定的某一张table(表)中选,第一个查询语句用来显示整个表的记录情况,而第二个查询语句是普通 的查询方式,更为普遍,where后面表示条件,其后跟随的是列的名字,如food_name,用等号连接 后面为查询的对象,如铁板鱿鱼,但是要用 英文的引号引起来,然后用英文的分号结束整个查询语句即可。对于数 字类型的值可以加单引号也可以不加,而对于字符类型的值而言需要加 单引号,而且必须加单引号。说明2:对于第三个的格式,select后面是列的名字,表示选择了某列,而* 号表示将所有的列全选上,其他的地方和以上两个查询语句相同。说明3:对于第四种形式而言,最大的不同在于对and和or 关键字的 应用,and表示两个或者多个条件都要满足,而or表示只要满足其中的 一个条件就可以了。说明4:between是一个很有效的比较方式,和and连用,并且在第一 个between...and之后也可以接第二个between and。说明5:用in关键字可以代替连续使用多个or的情况,上述where子 句等同于where food_name='碳烤鱼' or food_name='铁板鱿鱼' orfood_name='红烧肉' or food_name='辣子鸡丁' or food_name='烤龙 虾';还有一种状况是not in作用和in 正好相反。
通配符:
select* from food_list where food_name like'_鸡'and food_name like '%肉’;
说明:配合关键字like使用,通配符有%,_,%是任意数量的未知字符的通配符,_是单个未知字符的通配符,如'%肉'可能表示红烧肉,可以表示手抓羊肉,也可 以表示孜然烤肉,总之,其表示以肉字为结尾的所有字符,而'肉%'表示以肉开头 所有字符。'_鸡',表示两个字符,所有以'鸡'为结尾的字符串。
删除数据:
delete from food_list where food_name='红烧肉';说明:delete后面直接跟from,from后面是某个表的名字where后面是条件,表示要删除的某个元组(行)。
更新数据:
update food_list
setfood_name=”清真黑熊掌,暴炒驴肝”
where food_price=300;
说明:update之后的是表的名称,set的是对指定的记录要更新的值,而一切的决定权就设在where子句之中,如果没有where子句,整个food_name都列被设置为 清真黑熊掌,暴炒驴肝。而且最后的where子 句之中也可以和and,or,in,not in,like等关键字组合使用。
第四篇:SQL语言学习工作总结
以下是作者在学习SQL过程中,以工作总结方式写下点滴的感悟,敬请关注!
暑假过的真快总感觉昨天才刚放假,还想着这个暑假怎么过时,暑假就已经去了。
这个暑假一开始我们看了浙大的sql的视频,老师给我们的要求是只要看一遍就行。刚开始看的时候还能听懂一些,看到后面的时候基本就听不懂了,幸好老师对我们的要求不高,于时只好硬着头皮继续。
sql的视频其实总的说来无非讲的是对数据库、表、字段等的创建、修改和删除。我们不懂的也就是怎样使用代码来实现这些操作。我们现在只要对这些有了解就够了,以后还会有锻炼机会的。
之后我们参照着原代码做了《学生信息管理系统》,大概用了七天的时间。刚开始做的时候,觉得这个工程肯定会挺复杂的。但是做着做着感觉也就是那么回事。无非就是对几张表的操作。做这个工程最大的收获就是对刚学的sql知识有了一次熟练的机会,巩固了刚学的知识。也可以说是趁热打铁吧。
然后米老师给了我们更大的考验,让我们做《机房收费系统》,而且这次和上一次的《学生信息管理系统》不同的是,这次我们除了只有一个程序和数据库外,没有一个字的原码。
在得知我们可以把这次的工程做成任何样子时,我打算做一个类似于网吧那样的收费系统。也是一个cs系统。在网上查了一些主机如何与客户端通信的资料后,就开工了。虽然遇到了一些困难,但是到最后都一一解决了这三次的学习困难程度可以说是一次比一次高,米老师也是用心良苦呀。
经过这个暑假,对sql已经有了深一步的了解,还有就是将米老师的学习方法又应用了一次。可谓是受益匪浅。
现在软件工程的学习已经开始,我会继续努力的。
第五篇:SQL查询语句学习笔记
问题描述:
为管理岗位业务培训信息,建立3个表:
S(SID,SNAME,SDEPT,SEX,AGE)SID,SNAME,SDEPT,SEX,AGE 分别代表学号、学员姓名、所属部门、学员性别、学员年龄
C(CID,CNAME)CID,CNAME 分别代表课程编号、课程名称
SC(SID,CID,GRADE)SID,CID,GRADE 分别代表学号、所选修的课程编号、学习成绩
表结构与数据见Data4SqlTest1.sql
要求实现如下5个处理:
1.使用标准SQL嵌套语句查询选修课程名称为“英语”的学员学号和姓名
2.使用标准SQL Join语句查询选修课程名称为“英语”的学员学号和姓名
3.使用标准SQL语句查询不选修“数学”课程的学员姓名和所属单位
4.使用标准SQL嵌套语句查询选修全部课程的学员姓名和所属单位
5.查询选修了课程的学员人数
6.查询选修课程超过3门的学员学号和所属单位
1.使用标准SQL嵌套语句查询选修课程名称为“英语”的学员学号和姓名 Java代码
1.SELECT SNAME,SDEPT FROM S
2.WHERE SID IN(3.SELECT SID FROM C,SC
4.WHERE C.CID=SC.CID
5.AND CNAME='英语')
2.使用标准SQL Join语句查询选修课程名称为“英语”的学员学号和姓名 Java代码
1.SELECT SNAME,SDEPT FROM S
2.JOIN SC ON S.SID=SC.SID JOIN C ON C.CID=SC.CID
3.WHERE CNAME='英语'
3.使用标准SQL语句查询不选修“数学”课程的学员姓名和所属单位 Java代码
1.select SNAME,SDEPT
2.from S
3.where SID not in(4.select SC.SID
5.from SC
6.right join(select S.SID,C.CID from S join C)as T on SC.SID=T.SID
and SC.CID=T.CID join C on T.CID=C.CID
7.where C.CNAME='数学' and SC.SID is not null
8.)
或者是:
Java代码
1.SELECT SNAME,SDEPT FROM S
2.WHERE SID NOT IN(3.SELECT SID FROM SC
4.WHERE CID IN(SELECT CID FROM C WHERE CNAME='数学'))
4.使用标准SQL嵌套语句查询选修全部课程的学员姓名和所属单位 Java代码
1.select SNAME,SDEPT
2.from S
3.where SID in
4.(select S.SID
5.from S
6.inner join SC on S.SID=SC.SID
7.group by S.SID
8.having count(CID)=(select count(1)from C)
9.)
5.查询选修了课程的学员人数
Java代码
1.SELECT 学员人数=COUNT(DISTINCT(SID))FROM SC
6.查询选修课程超过3门的学员学号和所属单位
Java代码
1.SELECT SNAME,SDEPT FROM S
2.WHERE SID IN(3.SELECT SID FROM SC
4.GROUP BY SID
5.HAVING COUNT(DISTINCT(CID))>3)