浏览 7308 次
精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-01-27
最后修改:2011-01-28
今天复习数据库的SQL,想着需要总结下各种数据库的SQL的不同点,供总结查阅,供别人参考!(感谢各种补充)
1. SQL Server 的语法: SELECT TOP number|percent column_name(s) FROM table_name
2. MySql的语法: SELECT column_name(s) FROM table_name LIMIT number
3. Oracle的语法: SELECT column_name(s) FROM table_name WHERE ROWNUM <= number 注意:oracle ROWNUM不支持">=" 补充: 求薪水最高的第6到第10名雇员: SELECT ename,sal FROM (SELECT ename,sal,rownum r FROM (SELECT ename,sal FROM emp ORDER BY sal DESC) )WHERE r>=6 AND r<=10;
1. MySQL: CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), UNIQUE (Id_P) )
2. SQL Server / Oracle / MS Access: CREATE TABLE Persons ( Id_P int NOT NULL UNIQUE, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) )
3. MySQL / SQL Server / Oracle / MS Access: CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName) )
MySQL / SQL Server / Oracle / MS Access: ALTER TABLE Persons ADD UNIQUE (P_Id) 或 ALTER TABLE Persons ADD CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
1. MySql: ALTER TABLE Persons DROP INDEX uc_PersonID
2. SQL Server / Oracle / MS Access: ALTER TABLE Persons DROP CONSTRAINT uc_PersonID
这里只提供UNIQUE约束,PRIMARY KEY约束、FOREIGN KEY约束、CHECK约束类似。
1. MySql: CREATE TABLE Persons ( P_Id int NOT NULL AUTO_INCREMENT, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), PRIMARY KEY (P_Id) )
2. SQL Server: CREATE TABLE Persons ( P_Id int PRIMARY KEY IDENTITY, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) )
3.Access: CREATE TABLE Persons ( P_Id int PRIMARY KEY AUTOINCREMENT, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) )
4. Oracle: CREATE SEQUENCE seq_person MINVALUE 1 START WITH 1 INCREMENT BY 1 CACHE 10 INSERT INTO Persons (P_Id,FirstName,LastName) VALUES (seq_person.nextval,'Lars','Monsen')
1. SQL server/ MS Access SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0)) FROM Products
2. Oracle SELECT ProductName,UnitPrice*(UnitsInStock+NVL(UnitsOnOrder,0)) FROM Products
3.MySql SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0)) FROM Products 或 SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0)) FROM Products
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-01-28
这可多了去了。
mysql和sql server的左连接右连接只能用left join,right join,oracle左连接右连接可以写成: where table_a.a=tableb.b(+) 日期函数一大堆,基本都不一样,例如日期格式转成字符串: oracle: select to_char(sysdate,'yyyymmdd') from dual; mysql: select date_format(now(),'%Y%d%m') sql server: select convert(varchar(100), getdate(), 112); 字符串操作也基本不一样,例如mysql和oracle的函数substr()在sql server里是substring(),取左右、转义符、取字串等等等等。 正则表达式不一样,oracle是regexp_like,mysql是regexp,sql server貌似是xp_pcre_match。 |
|
返回顶楼 | |
发表时间:2011-02-19
可以看看sql in a nutshell。。上面有主流db的各种sql的描述
|
|
返回顶楼 | |
发表时间:2011-06-16
有的地方以前都没注意。。。
|
|
返回顶楼 | |