关于spl中SELECT使用

作者&投稿:路疮 (若有异议请与网页底部的电邮联系)
SPL数据库查询~

表设计:1学生表 ID学号,sName姓名 (studentTable)2成绩表 ID学号,score成绩,subject科目(scoreTable)插入学生表 insert into studentTable(ID,sName) values('0001','张三')插入成绩表 insert into scoreTable(ID,score,subject) values('0001',60,'数学')查询某同学成绩:select B.sName,A.subject,score from scoreTable A left join studentTable B on B.ID=A.ID where B.sName='张三'查询两门不及格的学生名单:select A.sName from studentTable A left join (select B.ID,count(B.ID) X from scoreTable B where B.score=2

update goods set b=2 where b in (select b from goods where a='plu' and b=1) and a in (select a from goods where a='plu' and b=1)
你这个表没有主键,这样更新完了会造成很多数据行都一样而没法删除,如果有主键那就更简单
update goods set b=2 where 主键 in (select 主键 from goods where a='plu' and b=1)

楼上的言语太过简单了!数据表都已经创建起来了,假设我们已经插入了许多的数据,我们就可以用自己喜欢的方式对数据表里面的信息进行检索和显示了,比如说:可以象下面这样把整个数据表内的内容都显示出来
select * from president;
也可以只选取某一个数据行里的某一个数据列
select birth from president where last_name=’Eisenhower’;
select语句的通用形式如下:
select 你要的信息
from 数据表(一个或多个)
where 满足的条件
select语句有几个子句,他们的各种搭配能帮你查出最感兴趣的信息,这些子句可以很简单,也可以很复杂,看看作者是如何详细讲解的

1, 用各种操作符来设定检索条件
要想让select语句只把满足特定条件的记录检索出来,就必须给它加上where字句来设置数据行的检索条件。只有这样,才能有选择地把数据列的取值满足特定要求的那些数据行挑选出来。可以针对任何类型的值进行查找,比如说,对数值进行搜索
select * from score where score>95; //显示所有分数在95分以上的信息
也可以针对字符串值进行查找
select last_name,first_name from president where last_name=’Tom’; //找出所有姓tom的总统
还可以对不同类型的值进行组合查找
select last_name,first_name,birth,state from president
where birth<’1950-1-1’ and (state=’VA’ or state=’BA’);
//找出1950年前出生于VA州或BA州的总统
可见 where子句中可以使用的是算术操作符(+-*/%),比较操作符(<>=)以及逻辑运算符,我们应该熟练理解这些操作符的含义(都很简单)

2, NULL 值的特别处理
这是一种不属于任何类型的值。它通常用来表示“没有数据”“数据未知”“数据缺失”“数据超出取值范围”“与本数据列无关”“与本数据列的其它值不同”等多种含义。在许多情况下,NULL 值是非常有用的。
我们的各种操作符是不能对NULL 值进行处理的,如果相对NULL 值进行查找,用的是 is null 或 is not null 来进行判断,举例如下:
select last_name,first_name,birth,state from president
where death is null; //找出所有没死的总统
在某些情况下,NULL 值是很有用的类型,大家慢慢就会理解的。

3, 查询结果进行排序
一般说来,如果创建了一个数据表并向里面插入了一些记录,当发出一条select * from name命令的时候,数据记录在查询结果中的先后顺序通常与它们被插入时的先后顺序一样.这当然符合我们的思维习惯.但这只是一种"想当然"的假设而已,事实上,但记录被删除时,数据库中会产生一些空的区域,MYSQL会用新的记录来填补这些区域,也就是说,这个时候本假设就不正确了.因此我们必须记住一点,从服务器返回的记录行的先后顺序是没有任何保证的!如果想要按照一定的顺序,就必须使用order by 子句来设置这个顺序.
select last_name,first_name,birth,state from president
order by last_name; //让总统们的名字按字母顺序排列
还可以设置排列的升序降序
select last_name,first_name from president
order by state DESC,last_name ASC;
//先按照出生地的降序排列,同出生地的按照姓氏的升序排列
注意:如果结果中含有NULL 值,默认情况下他们总是出现在查询结果的开头。

4, 限制查询结果中数据行个数
这个简单,只要用limit 子句就可以了,看两个例子:
select last_name,first_name,birth,state from president
order by birth limit 5; //只想看前5个
order by birth limit 10,5; //返回从第11个记录开始的5个记录(跳过了10个)
小技巧:从president表中随机找出一个总统来玩:
select last_name,first_name,birth,state from president
order by rand() limit 1; //这是用了表达式求值的方法,在哪里都管用

5, 对输出列进行求值和命名
为了提高效率,MYSQL还可以把表达式的计算结果当作输出列的值。表达式可以很简单,也可以很复杂。例如:下面这个查询有两个输出列,前一个输出列对应一个非常简单的表达式(一个常数),而后一个输出列则对应着一个使用了多个算术运算符和两个函数调用的复杂表达式。
Select 17,format(sqrt(3*3+4*4),0))
输出:17 5
再看这个命令:把两个输出列合并成一个
select concat(first_namem,’ ‘,last_name),concat(city,’,’,state) from president;
如果合并之后输出列的标题过长,则可以给其一个别名,如:
select concat(first_namem,’ ‘,last_name) as name,
concat(city,’,’,state) as birth place
from president;这样就比较美观了。

6, 和日期有关的问题
首先记住:在MYSQL中,年份是放到最前面的!我们通常对日期进行下列操作:
按日期进行排序
查找某个日期或日期范围
提取日期中的年,元,日各个部分
计算两个日期的间隔
用一个日期求出另外一个日期
看例子:
select * from event where date=’2002-10-01’ //看看这天有何考试信息?
select last_name,first_name,birth,state from president
where death>’1900-01-01’ and death<’2000-01-01’; //看看上个世纪死了几个?
三个函数year,month,dayofmonth可以分别分离出日期中的年月日来。
select last_name,first_name,birth from president
where month(birth)=3; //谁生在3月 ?
where month(birth)=7 and dayofmonth(birth) =6; //谁生在7月6日?(汤姆克鲁斯?)
函数to_days可以把日期转换为天数。
select last_name,first_name,birth to_days(death)-to_days(birth) as age from president
可以看看这帮家伙都活了多少天!你自己把它改为年吧。
日期值的减法运算还能帮我们计算出现在距离某个特定日期还有多长的时间,这正是我们用来找到需要在近期内缴纳会费的会员的办法:
select last_name,first_name,expiration from member
where (to_days(expiration)-to_days(curdate())<60; //有些人60天内需要花钱了!

7, 模式匹配
有些情况下,模糊查询是很必要的,我们使用like和not like加上一个带通配符的字符串就可以了。共有两个通配符”_”(单个字符)和”&”(多个字符)
select concat(first_namem,’ ‘,last_name) as name,
where last_name like ‘W%’; //找到以W或w开头的人
where last_name like ‘%W%’; //找到名字里面W或w开头的人

8, 设置和使用SQL变量
MYSQL 3.23.6以上的版本可以使用查询结果来设置变量,我们就能够方面的把一些结果保存起来以供他用。变量的命名规格是:@name, 赋值语法是 @name:=value ( pascal?) 使用起来也简单:
select @birth:=birth from president
where last_name =’adsltiger’; //执行完成后我们就就会有一个@birth变量可用
用一下试试:
select concat(first_namem,’ ‘,last_name) as name from president
where birth<@birth order by birth; //看看那些人比我大!

*9, 生成统计信息
单纯依靠手工来生成统计信息是一项既艰苦又耗时还容易出错的工作,如果我们能熟练掌握用数据库来生成各种统计信息的技巧,他就会成为很有威力的信息处理工具。作者在这里用了许多篇幅讲这个主题,为了便于大家理解,我分解开来论述:
9.1 找出一组数据中到底有多少种不同的值是一项比较常见的统计工作,而关键字distinct就可以把查询结果中的重复数据清除掉。如
select distinct state from president //看看美国总统们都来自那些州?(重复的不计)
9.2用count()函数来统计相关记录的个数,注意其使用方法:count(*)计算所有的,NULL也要;count(数据列名称) NULL值不计算在内。
select count(*) from president;
9.3如果我们想知道班级内的男女生数目?该如何查询呢?最简单的方法是
select count(*) from student where sex=’f’;
select count(*) from student where sex=’m
但是如果使用count函数结合group by关键字,一行命令就搞定了
select sex,count(*) f rom student group by sex;
我们可以看到,与反复使用彼此类似的查询来分别统计某数据列不同取值出现次数的做法相比, 把count(*)和group by字句相结合使用有许多优点,主要表现在:
在开始统计自前,不必知道被统计的数据列里面有多少种不同的取值
因为只用了一个查询命令,我们可以对输出做排序的处理
select state,count(*) as count from president
group by state order by count desc limt4; //看看出生总统最多的前四个州是哪几个?
9.4除了count(),我们还用其他一些统计函数,如求出最小值的min(),求最大值的max(),求和的sum(),求平均值的avg(),在实际工作中,这些函数时经常用到的!

*10, 从多个表提取信息
我们目前的例子都是从一个表里面提取信息,但数据库的真正威力还在于用“关系”来综合多个数据表里面的记录,这种操作称之为“关联”或“结合”我们可以看到,select需要给出多个数据表里面的信息(不可重复);from需要知道从哪几个表里面做事;where则对几个表之间的关联信息作出详细的描述。
首先我们要学习最可靠的数据列引用方式:数据表名.数据列名。这样在查询中就一定不会混淆这个数据列到底在哪一个表里。
例子1:查询某一天内的学生们的考试成绩,用学号列出。
select scroe.student_id,event_date,score.score.event.type
from event,score
where event.date=’2003-09-12’
and event.event_id=score.event_id
首先,利用event数据表把日期映射到一个考试事件编号,在利用这个编号把score表内相匹配的考试分数找出来。关联两个表,一个查询搞定。
例子2:查询某一天内的学生们的考试成绩,用姓名列出。
select student.name event.name,score.score,event.type
form event,score,student
where event.date=’2003-09-12’
and event.event_id= score.event_id
and scroe.student_id=student.student_id;
关联三个表,一个查询搞定。
例子3:查询一下缺席学生的名字,学号,缺席次数
select student.student_id,student_name
count(absence.date) as absences
from student,absence
where student.student_id=absence.student_id //关联条件
group by student.student_id;

简单的关联操作就介绍到这里。事实上,对于关联的知识我们需要学的很多很多,比如说,我们怀疑某一个数据表内不存在和我们相关的数据,把么在关联查询的时候如何处理这个表呢?这就涉及到内联接,外联接,左联接,右联接的许多新概念了。不知道大家还有没有信心向下看我的笔记?在本书第四章里面,对关联进行了十分详细的论述,看来“在SQL里面,干粗活的是select”的说法再对不过了。

我们了解了select命令的如此之多的用法,感到了它的灵活性,许多字句的组合能够形成一个非常“精妙”的SQL语句,在基础没有打好之前,我等初学者目前还没有必要去钻研那些技巧性很高的东西,“一定程度的创造性是必要的,但太专业或充满技巧的代码则是各种 bug的发源地,同时也是若干个不眠之夜的前奏”
注意:Group by 里面没有的字段,在Select字段列表里就必须加上聚合函数(sum,max,min,count...),不然那句SQL就是错的

Select * From YK_YFKCB where 名称 = '阿司匹林肠溶片'

SELECT *
FROM yk_yfkcb
WHERE 名称 = '药品名称'


南昌市17564041771: SQL语言中命令“SELECT”的用法!!! -
闾兰古纯: select 列名称 from 表名称 where 条件,其中列名称也可以是*,代表查处全部列. 比如: select * from 图书表 where 图书名='计算机导论' 表示从图书表中查出图书名='计算机导论'的书的全部信息 如:select 图书名,地址,电话 from 图书表 where 图书名='计算机导论' 表示从图书表中查出图书名='计算机导论'的书的某几个信息,图书名,地址,电话~~ 希望对你有用~~ 祝早日成功!

南昌市17564041771: SQL里SELECT和UPDATE语句的用法. -
闾兰古纯: select 字段名(可以有多个,如果查询所有字段的话,可以用*号) from 表名 [where 字段=查询条件]后面的where条件可选. 如:select * from jobs where job_desc>50 select job_id from jobs update: update 表名 set 列名=更新值 [where+条件,和...

南昌市17564041771: pl/sql 中使用select查询,如何表示空数据项 -
闾兰古纯: cursor 游标名 is select * from 表名 where 字段名 is null;

南昌市17564041771: sqlsever中有关select语句的用法 -
闾兰古纯: SELECT基本语句: SELECT [ALL | DISTINCT] select_list (select 后跟列名) FROM table_1[,...,table_n] (from 后跟表名) [JOIN join_table [ON join_condition] ] [WHERE search_condition] (where 后跟条件) [GROUP BY group_by_expression] (group by...

南昌市17564041771: 在sql中,可不可以用select语句取出某个列,并将该列赋值给一个变量 -
闾兰古纯: 使用存储过程就可以! CREATE PROCEDURE [dbo].[d_hotelsLogin]@ID decimal =0 output,@userID varchar(50),@pwd varchar(50),@log_ip varchar(50) ASbeginif not exists(select * from dbo.[hotels] where userID=@userID and ...

南昌市17564041771: 在SQL中使用select语句时 -
闾兰古纯: SQL查询语句:select placeid,placename from 表名 where placename like '%阜阳%'解释:1,select placeid,placename 表示从表中要查询的列,如果查询所有列可以写 select *.但select * 的效率 没有select 列名1,列名2,...列名X 的高,sql里可...

南昌市17564041771: sql语句如何用select语句查询出表中字段的属性 -
闾兰古纯: oracle:desc table_name; sql server:sp_help tablename

南昌市17564041771: SQL2005中select的使用方法?
闾兰古纯: 第三种方法在对单张表的查询的时候体现不出来它的用处 但是对多张表连接查询的时候,特别是当不同表中存在相同字段名的时候, 用表名.列明的方式明确指明你查询的是那张表的字段

南昌市17564041771: 在存储过程中怎么使用select语句 -
闾兰古纯: 也是习惯了SQL Server的存储过程中直接可以使用select语句输出结果集,但这个在Oracle中就行不通了.如果你仅仅是想看到存储过程中语句所影响的记录内容,那么可以考虑使用游标,然后循环游标用dbms_output将内容输出,从而可以在dbms的输出中看到;如果是要使用在其它地方,那么要给此存储过程设置一个ref cursor输出参数,并且在存储过程中设置好此游标.

南昌市17564041771: 在SQL中用SP - HELP 表名 查出表的结构 假设查出列名name 类型为varchar 如何查出列名name varchar的长度 -
闾兰古纯: select b.* from sys.objects a,sys.columns b where a.name = '表名' and a.object_id = b.object_id

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网