mysql中的union和order by、limit
我有一个表
CREATE TABLE `test1` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`desc` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
(1)以下查询会报错误:[Err] 1221 - Incorrect usage of UNION and ORDER BY
select * from test1 where name like 'A%' order by name
union
select * from test1 where name like 'B%' order by name
应改为:
select * from test1 where name like 'A%'
union
select * from test1 where name like 'B%' order by name
因为union中,在不用括号的情况下,只能用一个order by(想一想,如果union两边的order by的列名不一样会怎么样),这会对union后的结果集进行排序
或者改为:
(select * from test1 where name like 'A%' order by name)
union
(select * from test1 where name like 'B%' order by name)
这两个order by在union前进行
(2)同样的
select * from test1 where name like 'A%' limit 10
union
select * from test1 where name like 'B%' limit 20
相当于
(select * from test1 where name like 'A%' limit 10)
union
(select * from test1 where name like 'B%') limit 20
即后一个limit作用于的是union后的结果集,而不是union后的select
也可以加括号来得到你想要的结果
(select * from test1 where name like 'A%' limit 10)
union
(select * from test1 where name like 'B%' limit 20)
(3)UNION和UNION ALL区别
union会过滤掉union两边的select得到的结果集中的重复的行,而union all不会过滤掉重复的行
相关文档:
我的系统是ubuntu6.06,最近新装好的mysql在进入mysql工具时,总是有错误提示:
# mysql -uroot -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
使用网上介绍的方法修改root用户的密码:
# mysqladmin -uroot -p password 'newpassword'
Enter pass ......
创建数据库:
mysql>create database test;
Query OK, 1 row affected (0.02 sec)
创建数据库表:
mysql>use test;
Database changed
创建数据库表:
myaql>create table user(SID VARCHAR(11), name VARCHAT(6) );
Query OK, 0 rows affected (0.08 sec)
插入记录:
mysql>insert int use ......
1. 连接mysql:
mysql -h 主机地址 -u 用户名 -p
2.退出mysql:exit
3. 修改密码:
mysqlbinmysqladmin -uroot -p(oldpassword) password newpassword
4.增加用户:
添加一个用户test1 密码为ABC;让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入
mysql,然后键入以下命 ......