您的位置:首页 > 数据库

关于数据库DBM不同造成的SQL语句差异

2010-06-06 20:40 204 查看
平时我们使用的Oracle数据库,MS数据库,Mysql数据库,其实就是一个数据库管理系统,它位于用户与操作系统之间一层的数据库软件。

虽然SQL(structured Query language)有一套自己的规范,但是软件厂商还是对SQL命令集进行了修改和扩展。
今天晚上,我翻了一下我的数据库教材《数据库系统概论(第四版)》,之前我们班教学都是使用MSsql的,但是为了练习一下Mysql,也在mysql上运行了一下,发现两者有些区别:
 
教材中讲到Like关键字的时候有一道练习题如下
【注意】  【为了方便大家看清楚,下划线和下划线之间已经加了空格】

Code:

【例16】查询姓“欧阳”且全名为3个汉字的学生的名字。   

它的语句是这样的:   

   Select  Sname  FROM  Student  WHERE  Sname  LIKE  ‘欧阳_ _’;   

 

Code:

但是在MySQL中一个下划线就当做为一个汉字,效果如下:   

  

为了让大家看得更加清楚,现将student表里的内容全部选出   

 

Code:

mysql> select * from student;   

+-----+-------+------+------+----------+   

| Sno | Sname | Ssex | Sage | Sdept    |   

+-----+-------+------+------+----------+   

| 001 | 张三  | 男   |   20 | 计算机系 |   

| 002 | 李四  | 女   |   21 | 外语系   |   

| 003 | 王五  | 男   |   22 | 中文系   |   

| 004 | 赵六  | 女   |   23 | 经管系   |   

+-----+-------+------+------+----------+   

 

Code:

如果是安照课本的要求,应该使用6条下划线   

mysql> select * from student where sdept like '计_ _ _ _ _ _';   

Empty set (0.00 sec)   

但是结果是:我们并没有从表里选出任何内容   

  

当我使用3条下划线的时候,刚好可以选出   

mysql> select * from student where sdept like '计_ _ _';   

+-----+-------+------+------+----------+   

| Sno | Sname | Ssex | Sage | Sdept    |   

+-----+-------+------+------+----------+   

| 001 | 张三  | 男   |   20 | 计算机系 |   

+-----+-------+------+------+----------+   

建议:这本教材里面没有提到这些代码是在哪个数据库下执行的,对于自学的人来说,是一件很郁闷的事情,因为都不知道自己哪里错了,希望作者能在书本的开篇就说明本书是使用哪个数据库的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息