数据库的查询

基本查询(单表查询):

 

select 1,列2,。。。from 表名

 

1.选择列

1)看所有字段  *

 

select * from product;

 

2)部分字段:

 

select pid,pname from product;

 

3)给列加列标题

 

字段名 [as] 列标题  如果列标题中有空格,要使用单引号

 

select pid as 产品编号,pname as产品名称 from product;

 

4case: 替换查询中的结果

 

select 学号,姓名,性别 from xs;

 

select 学号,姓名,case

when 性别=1 then ''

when 性别=0 then ''

end as 性别

from xs;

 

5)计算列

 

select 学号,姓名,总学分+5 fromxs;

 

 

2.选择行

1.where  条件

比较运算符:  = >  >= <   <=   <>  !=  <=>

 

逻辑运算符:  and  or  not

 

计算机系女生记录   表中女用0表示

select 姓名,专业名,性别

from xs

where 专业名='计算机' and 性别=0

 

 选择(Selection

选择是单目运算,其运算对象是一个表。该运算按给定的条件,从表中选出满足条件的行形成一个新表作为运算结果。

使用数据库和表的主要目的是存储数据以便在需要时进行检索、统计或组织输出,通过SQL语句的查询可以从表或视图中迅速方便地检索数据。SQLSELECT语句可以实现对表的选择、投影及连接操作。

SELECT语句可以从一个或多个表中选取特定的行和列,结果通常是生成一个临时表。在执行过程中系统根据用户的标准从数据库中选出匹配的行和列,并将结果放到临时的表中,这就是实现选择和投影运算的一个形式。

下面介绍SELECT语句,它是SQL的核心。

语法格式:

SELECT

   [ALL | DISTINCT | DISTINCTROW ]

   [HIGH_PRIORITY]

   [STRAIGHT_JOIN]

   [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]

   [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]

   select_expr, ...

   [INTO OUTFILE 'file_name' export_options | INTO DUMPFILE 'file_name']

   [FROM  table_reference [ ,table_reference] …]                                                                                     /*FROM子句*/

   [WHERE where_definition]                                                                                                                                                  /*WHERE子句*/

   [GROUP BY {col_name | expr | position} [ASC | DESC], ... [WITH ROLLUP]]   /* GROUP BY子句*/

   [HAVING where_definition]                                                                                                                                                 /*HAVING 子句*/

   [ORDER BY {col_name | expr | position} [ASC| DESC] , ...]                                                    /*ORDERBY子句*/

   [LIMIT {[offset,] row_count | row_count OFFSET offset}]                                                                /*LIMIT子句*/

说明:

从这个基本语法可以看出,最简单的SELECT语句是SELECT select_expr,利用这个最简单的SELECT语句,可以进行MySQL所支持的任何运算,例如,SELECT 1+1,它将返回2

SELECT关键词的后面可以使用很多的选项:

   ALL| DISTINCT | DISTINCTROW:这几个选项指定是否重复行应被返回。如果这些选项没有被给定,则默认值为ALL(所有的匹配行被返回)。DISTINCT DISTINCTROW是同义词,用于消除结果集合中的重复行。

HIGH_PRIORITYSTRAIGHT_JOIN和以SQL_为开头的选项都是MySQL相对于标准SQL的扩展,这些选项在多数情况下可以选择不使用。

HIGH_PRIORITY:给予SELECT更高的优先权,使查询立刻执行,加快查询速度。

 STRAIGHT_JOIN:用于促使MySQL优化器把表联合在一起,加快查询速度。

 SQL_SMALL_RESULT:可以与GROUP BYDISTINCT同时使用,来告知MySQL优化器结果集合是较小的。在此情况下,MySQL使用快速临时表来储存生成的表,不使用分类。

SQL_BUFFER_RESULT:促使结果被放入一个临时表中。这可以帮助MySQL提前解开表锁定,在需要花费较长时间的情况下,也可以帮助把结果集合发送到客户端中。

当自定义的列标题中含有空格时,必须使用引号将标题括起来。例如:

SELECT 学号AS 'Studentnumber', 姓名AS 'Student name', 总学分 AS mark

   FROM XS

   WHERE 专业名= '计算机';

说明:不允许在WHERE子句中使用列别名。这是因为,执行WHERE代码时,可能尚未确定列值。例如,下述查询是非法的:

SELECT 性别 AS SEX FROM XSWHERE SEX=0;

MySQL有一个特殊的等于运算符“<=>”,当两个表达式彼此相等或都等于空值时,它的值为TRUE,其中有一个空值或都是非空值但不相等,这个条件就是FALSE。没有UNKNOWN的情况。

【例4.34】查询XS表中备注为空的同学的情况。

SELECT 姓名,学号,出生日期,总学分

    FROM XS

    WHERE 备注<=>NULL;

从查询条件的构成看出,可以将多个判定运算的结果通过逻辑运算符(ANDORXORNOT)组成更为复杂的查询条件。有关逻辑运算符,第6章会具体介绍。

【例4.35】查询XS表中专业为计算机,性别为女(0)的同学的情况。

SELECT 姓名,学号,性别,总学分

    FROM XS

    WHERE 专业名='计算机'  AND 性别=0;

查询结果为:

如果我们想要查找特殊符号中的一个或全部(_%),我们必须使用一个转义字符。

【例4.38】查询XS表中名字包含下画线的学生学号和姓名。

SELECT 学号,姓名

  FROM XS

  WHERE 学号LIKE '%#_%' ESCAPE '#';

说明:由于没有学生满足这个条件,所以这里没有结果返回。定义了“#”为转义字符以后,语句中在“#”后面的“_”就失去了它原来特殊的意义。

2REGEXP运算符

REGEXP运算符用来执行更复杂的字符串比较运算。REGEXP是正则表达式(regularexpression)的缩写。和LIKE运算符一样,REGEXP运算符有多种功能,但它不是SQL标准的一部分,REGEXP运算符的一个同义词是RLIKE

语法格式:

match_expression [ NOT ][ REGEXP | RLIKE ]match_expression

LIKE运算符有两个符号具有特殊的含义:“_”“%”。而REGEXP运算符则有更多的符号有特殊的含义,参见表4.11

 

查看学号是081101,和081106的姓名,性别,专业名

 

查看1990年以后出生的学生姓名

select 姓名 from xs

where 出生日期>'1990-01-01';

 

查看不是1990年出生的学生的姓名;

select 姓名 from xs

where 出生日期<'1990-01-01'or 出生日期>'1990-12-31';

 

select 姓名 from xs

where not(出生日期>='1990-01-01'and 出生日期<='1990-12-31');

 

 

查看总学分在50-52之间的学生姓名

select 姓名 from xs

where 总学分>=50 and 总学分<=52;

 

 

模式匹配:模糊查询   匹配符:%  _

 

%:任意多个任意字符

_:任意单个字符

 

like运算符 

 

查询姓李的学生

 

select 姓名 from xs

where 姓名 like '%';

 

name中倒数第二个字母是b的姓名

name like '%b_'

 

 

书名 like '%java%'

 

 

 

关系数据库中的三种操作:选择  投影  连接

 

select 1 [as] 列标题,列

from 表名

where 条件

 

1.比较运算符

2.逻辑运算符   and  or  not

3.模式匹配  like  %_

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值