关于数据库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 | 计算机系 |
+-----+-------+------+------+----------+
建议:这本教材里面没有提到这些代码是在哪个数据库下执行的,对于自学的人来说,是一件很郁闷的事情,因为都不知道自己哪里错了,希望作者能在书本的开篇就说明本书是使用哪个数据库的。
虽然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 | 计算机系 |
+-----+-------+------+------+----------+
建议:这本教材里面没有提到这些代码是在哪个数据库下执行的,对于自学的人来说,是一件很郁闷的事情,因为都不知道自己哪里错了,希望作者能在书本的开篇就说明本书是使用哪个数据库的。
相关文章推荐
- 数据库关于同一张表不同条件取出数量的横向添加sql语句
- 在ADO.NET中使用参数化SQL语句访问不同数据库时的差异
- 各数据库关于显示成男女各有不同的sql语句,有没有什么统一的标准写法呢???
- 通过一条sql语句访问不同服务器中的数据库对象的方法
- C#不同数据库连接方式对应的Sql语句的构造
- 不同数据库在C#中使用参数化SQL语句的大同小异
- 关于update语句在不同数据库中的差别
- 关于一些常用SQL设置数据库的语句
- 关于PHP连接数据库SQL语句的易犯错误
- [置顶] 数据库统计不同字段数量时的sql语句
- 在不同SQL服务器上的数据库之间表记录的复制(sql语句实现)
- 不同数据库SQL语句分页
- 关于Update语句在不同数据库中的差别
- 不同服务器上数据库的链接的SQL 语句(code)
- 关于Oracle和SQLServer数据库在.net中拼接数据库语句的不同
- 关于数据库统计查询的sql语句
- 关于数据库查询语句SqlDataReader的连接释放问题的解决办法
- 关于MySql中数据库、表的操作以及增删改查等一些SQL语句注意事项
- 一些比较少用的SQL语句,实现不同数据库之间信息的传递
- 在不同SQL服务器上的数据库之间表记录的复制(sql语句实现)