SQL语句中,MySQL不支持的几种情况

  • Post author:
  • Post category:mysql


1.TOP语句

SELECT TOP 10 * FROM table_name    #选取表中前10的数据

MySQL不支持TOP语句,可用LIMIT替代。

SELECT * FROM table_name LIMIT 10    #选取表中前10的数据

那再说说LIMIT吧

SELECT * FROM table_name LIMIT 5, 10    #两个参数时,表示从6开始的10个,也就是6-15行

还有,当偏移量(offset)很大时

SELECT * FROM table_name LIMIT 10000, 10

性能明显下降,我们可以首先获取到offset的id然后直接使用limit size来获取数据。

SELECT * FROM table_name WHERE id >= (
SELECT id FROM table_name ORDER BY id LIMIT 10000, 1
)LIMIT 10

2. FULL JOIN(全连接)

FULL JOIN:从左,右表中返回所有行,包括没有匹配的行。

MySQL不支持全连接,可用UNION来联合左,右连接。

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
LEFT JOIN Orders
ON Persons.Id_P=Orders.Id_P 
UNION
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
RIGHT JOIN Orders
ON Persons.Id_P=Orders.Id_P

再说说UNION

UNION:合并两个或多个SELECT语句的结果集(去重)。

UNION ALL:合并不去重。

3. SELECT INTO

复制表中数据到新表中。

SELECT * INTO newtable_name FROM oldtable_name

MySQL不支持SELECT INTO,可用

CREAT TABLE newtable_name (SELECT * FROM oldtable_name)

4.CHECK约束

CHECK约束用于限制列中的值得范围。

可是MySQL数据库对CHECK约束无效,可用触发器来实现功能。

CREATE TRIGGER person_check 
BEFORE INSERT ON Persons
FOR EACH ROW  
BEGIN  
    IF NEW.Id_P < 0 THEN  
        SET NEW.id_P = 0;  
    END IF;  
END

5.FIRST(),LAST()函数

FIRST(),LAST():顾名思义,就是返回指定列中第一个/最后一个记录的值。

MySQL不支持FIRST(),LAST()函数。

也可用LIMIT + ORDER BY

SELECT column_name FROM table_name    #FIRST()
ORDER BY column_name ASC              #默认升序,可省略
LIMIT 1;
SELECT column_name FROM table_name    #LAST()
ORDER BY column_name DESC
LIMIT 1;

PS:还有什么不足,欢迎补充。:)



版权声明:本文为weixin_41462047原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。