篇一:MySQL语句大全集锦+加详细解说 MYSQL查询语句大全集锦 1:使用SHOW语句找出在服务器上当前存在什么数据库: mysql> SHOW DATABASES; 2:2、创建一个数据库MYSQLDATA mysql> CREATE DATABASE MYSQLDATA; 3:选择你所创建的数据库 mysql> USE MYSQLDATA; (按回车键出现Database changed 时说明操作成功~) 4:查看现在的数据库中存在什么表 mysql> SHOW TABLES; 5:创建一个数据库表 mysql> CREATE TABLE MYTABLE (name VARCHAR(20), sex CHAR(1)); 6:显示表的结构: mysql> DESCRIBE MYTABLE; 7:往表中加入记录 mysql> insert into MYTABLE values (‖hyq‖,‖M‖); 8:用文本方式将数据装入数据库表中(例如D:/mysql.txt) mysql> LOAD DATA LOCAL INFILE ―D:/mysql.txt‖ INTO TABLE MYTABLE; 9:导入.sql文件命令(例如D:/mysql.sql) mysql>use database; mysql>source d:/mysql.sql; 10:删除表 mysql>drop TABLE MYTABLE; 11:清空表 mysql>delete from MYTABLE; 12:更新表中数据 mysql>update MYTABLE set sex=‖f‖ where name=’hyq’; 以下是无意中在网络看到的使用MySql的管理心得, 在windows中MySql以服务形式存在,在使用前应确保此服务已经启动,未启动可用net start mysql命令启动。而Linux中启动时可用―/etc/rc.d/init.d/mysqld start‖命令,注意启动者应具有管理员权限。 刚安装好的MySql包含一个含空密码的root帐户和一个匿名帐户,这是很大的安全隐患,对于一些重要的应用我们应将安全性尽可能提高,在这里应把匿名帐户删除、 root帐户设置密码,可用如下命令进行: use mysql; delete from User where User=‖; update User set Password=PASSWORD(’newpassword’) where User=’root’; 如果要对用户所用的登录终端进行限制,可以更新User表中相应用户的Host字段,在进行了以上更改后应重新启动数据库服务,此时登录时可用如下类似命令: mysql -uroot -p; mysql -uroot -pnewpassword; mysql mydb -uroot -p; mysql mydb -uroot -pnewpassword; 上面命令参数是常用参数的一部分,详细情况可参考文档。此处的mydb是要登录的数据库的名称。 在 进行开发和实际应用中,用户不应该只用root用户进行连接数据库,虽然使用root用户进行测试时很方便,但会给系统带来重大安全隐患,也不利于管理技 术的提高。我们给一个应用中使用的用户赋予最恰当的数据库权限。如一个只进行数据插入的用户不应赋予其删除数据的权限。MySql的用户管理是通过 User表来实现的,添加新用户常用的方法有两个,一是在User表插入相应的数据行,同时设置相应的权限;二是通过GRANT命令创建具有某种权限的用 户。其中GRANT的常用用法如下: grant all on mydb.* to NewUserName@HostName identified by ―password‖ ; grant usage on *.* to NewUserName@HostName identified by ―password‖; grant select,insert,update on mydb.* to NewUserName@HostName identified by ―password‖; grant update,delete on mydb.TestTable to NewUserName@HostName identified by ―password‖; 若要给此用户赋予他在相应对象上的权限的管理能力,可在GRANT后面添加WITH GRANT OPTION选项。而对于用插入User表添加的用户,Password字段应用PASSWORD 函数进行更新加密,以防不轨之人窃看密码。 对于那些已经不用的用户应给予清除,权限过界的用户应及时回收权限,回收权限可以通过更新User表相应字段, 也可以使用REVOKE操作。 下面给出本人从其它资料获得的对常用权限的解释: 全局管理权限: FILE: 在MySQL服务器上读写文件。 PROCESS: 显示或杀死属于其它用户的服务线程。 RELOAD: 重载访问控制表,刷新日志等。 SHUTDOWN: 关闭MySQL服务。 数据库/数据表/数据列权限: ALTER: 修改已存在的数据表(例如增加/删除列)和索引。 CREATE: 建立新的数据库或数据表。 DELETE: 删除表的记录。 DROP: 删除数据表或数据库。 INDEX: 建立或删除索引。 INSERT: 增加表的记录。 SELECT: 显示/搜索表的记录。 UPDATE: 修改表中已存在的记录。 特别的权限: ALL: 允许做任何事(和root一样)。 USAGE: 只允许登录–其它什么也不允许做。 一、 简单查询 简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的表或视图、以及搜索条件等。 例如,下面的语句查询testtable表中姓名为―张三‖的nickname字段和email字段。 复制内容到剪贴板 代码:SELECT `nickname`,`email`FROM `testtable` WHERE `name`=`张三` (一) 选择列表 选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变量和全局变量)等构成。 1、选择所有列 例如,下面语句显示testtable表中所有列的数据: 复制内容到剪贴板 代码:SELECT * FROM testtable 2、选择部分列并指定它们的显示次序 查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。 例如: 复制内容到剪贴板 代码:SELECT nickname,email FROM testtable 3、更改列标题 在选择列表中,可重新指定列标题。定义格式为: 列标题=列名 列名 列标题 如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列标题: 复制内容到剪贴板 代码:SELECT 昵称=nickname,电子邮件=email FROM testtable 4、删除重复行 SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。 5、限制返回的行数 使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是 篇二:Mysql查询语句大全 Mysql查询语句大全 1.两表之间的查询,例如:查询员工表中部门号与部门表中部门号相等 select * from tb_emp ,tb_dept where tb_emp.deptno=tb_dept.deptno; (这是同时显示两张表中相等的depton 所有字段)(tb_emp ,tb_dept这都是表名) 2.select tb_e.deptno from tb_e, tb_d where tb_e.deptno=tb_d.deptno; (这是只显示员工表中的tb_e.deptno,并且条件是员工表中部门号与部门表中部门号相等) 3.给字段取别名 select product_price*12 totsl_product_price from productinfo; 等价select product_price*12 from productinfo; 也可以这样写 select product_price*12 totsl product_price from productinfo; 有特殊的字符时用双引号的方法,(特殊字符是:中文,日文,分号等)(totsl product_price是 product_price*12) ****** 0 和空 还有空格不是一个概念 例如: select * from emp where description is null; select * from emp where description =0; select * from emp where description =`空格`; 查询的结果都市不一样的。 distinct 关键字可以查询结果中清除重复的行,他的作用范围是后面的所有字段的组合; 例如: select distinct deptno ,deptname from emp where deptno=23; totsl_product_price是product_price的别名; select ename, sal*12 as `年薪`from emp;别名的作用是 让查询出来的结果可以让别人(外行)看了一目了然的作用上面是针对产品价格计算出总金额,价格*12,也就是对字段值进行加减乘除, *****任何含有空值的表达式计算后的值都是空值。( 空值+20=空值,等等) 不等值查询(mysql两者都支持) select * from productinfo where product_id!=33; oracl的不等值查询 select * from productinfo where product_id>>`33`; 小于查询 select * from productinfo where product_id>`33`; 大于查询 select * from productinfo where product_id>`33`; 等于查询 select * from productinfo where product_id=`33`; 在一定值范围内查询 例如 1000--5000的查询 select ename, sal as `月薪`from emp where sal>=1000 and s al>=5000; 在两个值之间的查询 between...... and (包含最小值和最大值) select ename, sal as `月薪`from emp where sal between 1000 and 5000; in 查询在什么里面 示例 :在emp表中查询部门编号为25 25 20 这三个值中的 某些字段 select ename, sal,deptno from emp where deptno in (25,26,20); not in 刚好与上面的相反 like 是做模糊查询使用 and 表示要满足所有条件 例如: select ename, sal,deptno from emp where ename like `%ff` and deptname=`市场部`; or 查询 表示只要满足其中一个条件就行,例如 select ename, sal,deptno from emp where ename like `%ff` or deptname=`市场部`; not in 取反的意思 表示不包含优先级 级别 (可以用括号提高优先级别) 排序用的是 order by 降序 desc 默认是升序 注意 排序时 排序的字段只能是int 类型否则排序的效果会出现不理想的结果 */*****可以在这样做 sal是varchar 对sal排序时: select ename as `姓名`, sal as`月薪` from emp order by sal+0; 例如:自己建表的时候,把一个字段类型创建为 varchar(2) ,其实应该建为int(2)的。因为我只允许输出数字。这本来也没什么,无非就是占点空间,懒得改了。但是今天在后台发现排序有问题。于是,没办法,改之。下面简单说一下MySQL的varchar排序问题,引以为戒。 下面,我从数据库里面以server_id排一下序,大家来看一下排序后的结果: select server_id from cardserver where game_id = 1 order by server_id desc limit 10; +-----------+ | server_id | +-----------+ | 8| | 7| | 6| | 5| | 4| | 3| | 2| | 10 | | 1| +-----------+ 很明显,我想要的结果应该是 10,8,7,6,5 这样的。但是这个10排在了2的后面。按照字符串来排的。其实我是想把它当做数值来排。 手动转换类型: 用下面的方法就可以了,使server_id+0之后再排序,问题解决了。 select server_id from cardserver where game_id = 1 order by server_id+0 desc limit 10; +-----------+ | server_id | +-----------+ | 10 | | 8| | 7| | 6| | 5| | 4| | 3| | 2| | 1| +-----------+ 使用MySQL函数CAST/CONVERT: mysql为我们提供了两个类型转换函数:CAST和CONVERT,现成的东西我们怎能放过, CAST() 和CONVERT() 函数可用来获取一个类型的值,并产生另一个类型的值。 这个类型 可以是以下值其中的一个: BINARY[(N)] CHAR[(N)] DATE DATETIME DECIMAL SIGNED [INTEGER] TIME UNSIGNED [INTEGER] 所以我们也可以用CAST解决问题: select server_id from cardserver where game_id = 1 order by CAST(server_id as SIGNED) desc limit 10; 也可以使用CONVERT来搞定此问题: select server_id from cardserver where game_id = 1 order by CONVERT(server_id,SIGNED) desc limit 10; 在productinfo表中查询 update_time ,create_time这两个字段,条件是product_id=`33`; select update_time ,create_time from productinfo where product_id=`33`; 在两个值之间的查询 between...... and select ename, sal as `月薪`from emp where sal between 1000 and 5000; 插入数据时一定要注意字段的类型 int型不用加单引号,varchar 型的要加上单引号 例如: insert into emp (deptno,ename ,sex, eemail ,deptname ,sal) values (30,`luo1`,`nan`,`123456`,`开发部`,`3000`); auto_increment 自动增长 description 描述, 修改列的类型 alter table 表名 modify 列名 列类型 修改列名 alter table 表名 change 旧列名 新列名 列类型 alter table emp change name ename varchar(20); 增加列 alter table 表名 add column 字段名(列名) 列类型 (column可以有和无 标准的应该有 column ) alter table emp add column moblie int (11); alter table 表名 add column 字段名(列名) 列类型 after/befor 列名(字段名) 删除列 把上面的add改为drop 就行了; 修改表名 alter table 表名 rename 新表名; alter table emp rename tb_emp; rename table 表名 to新表名 rename tabletb_emp to emp; 删除 表中的某一个字段 (注意 删除此字段时 此字段一低昂要是不关联的字段,否则删除失败,删除成功 数据也伴随着删除了) 语法是: alter table 表名 drop 字段名; alter table emp drop eemail; **** 删除表中的莫一条记录用的时候 delete 语句 例如 :delete from emp where id =40; ****** 更新某一条记录的数据时用 update语句 update ...set 例如; update emp set ename=`kkkk22` where id=20; 更新多个字段的值 update emp set ename =`222255`,sex=`女`where id=10; 约束。 check 约束在mysql中不起作用; >= ,=> ,= >xAND>x(不等于x的查询)where 的条件 Incorrect integer value: `` for column `sal` at row 10 函数,单行函数 ,字段值的函数单行函数: concat(str1,str2,....) 连接函数字段值的函数select now(); 插入 时间数据 insert into emp (birth) values ( now()); 插入时间 可以用时间函数,也可以手动插入,手动插入: insert into emp (birth,birthday,hierday)values(`1999-02-06`,`19 98-03-02`,`2001-05-26`);插入的时间要在单引号内。 insert into emp (birth,birthday,hierday)values(`19990206`,`19980302`,`20010526`);这样也行。 insert into emp (birth,birthday,hierday)value(`1999/02/06`,`199 8/05/02`,`2001/05/06`);这也行 **** 注意 函数后面要紧跟着括号 ,不能有空格号; 常用的数据类型是 int ,char ,varchar, 时间的是:date,datetime,等 聚合函数是对一组值进行计算,并返回单个值,也叫组合函数,除了count()以外,聚合函数都会忽略null值。 下列是聚合函数(五个:avg,sum,max,min,count) select avg(sal) from emp; 对emp表中的sal求平均值。 select sum(sal) from emp; 求和 select count(sal) from emp; 求总共的行数 select max(sal) from emp; select min(sal) from emp; select avg(sal) as `工资平均值`,max(sal) as `最高工资`,min(sal) as`最低工资`,sum(sal) as`工资总和`, count(sal) as `总共的记录` from emp; ****** count 不统计null,统计的事记录数; select count(*) from emp; 星号是统计所有的记录。 ifnull(sal,0)是如果有值就取第一个sal,否则就取零。 例如: select avg(ifnull(sal,0)) from emp; 分组统计:Group by 子句是真正作用在于与各种聚合函数配合使用。它是用来查询出来的数据进行分组。 分组的含义是:把该列具有相同值的多条记录当成一条记录处理,最后只输出一条记录。分组函数忽略空值。 如果需要排序在用order by 子句。 当查询时一定要注意 select deptno, avg(ifnull(sal,0)) from emp; 这个语句是错误的,因为deptno没有出现在聚合函数中,也没有出现在 Group by子句中,后面应该跟 Group by 子句; select deptno, avg(sal) from emp group by deptno; 查询每一个部门的平均工资。 select deptno, count(*) from emp group by deptno; 查询每一个部门的总数 篇三:经典MYSQL语句 SQL分类: DDL—数据定义语言(Create,Alter,Drop,DECLARE) DML—数据操纵语言(Select,Delete,Update,Insert) DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK) 首先,简要介绍基础语句: 1、说明:创建数据库 Create DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建 备份数据的 device USE master EXEC sp_addumpdevice `disk`, `testBack`, `c:mssql7backupMyNwind_1.dat` --- 开始 备份 BACKUP DATABASE pubs TO testBack 4、说明:创建新表 create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) 根据已有的表创建新表: A:create table tab_new like tab_old (使用旧表创建新表) B:create table tab_new as select col1,col2? from tab_old definition only 5、说明:删除新表 drop table tabname 6、说明:增加一个列 Alter table tabname add column col type 注:列增加后将不能删除。DB2中列加上后数据类型也不 能改变,唯一能改变的是增加varchar类型的长度。 7、说明:添加主键: Alter table tabname add primary key(col) 说明:删除主键: Alter table tabname drop primary key(col) 8、说明:创建索引:create [unique] index idxname on tabname(col?.) 删除索引:drop index idxname 注:索引是不可更改的,想更改必须删除重新建。 9、说 明:创建视图:create view viewname as select statement 删除视图:drop view viewname 10、说明:几个简单的基本的sql语句 选择:select * from table1 where 范围 插入:insert into table1(field1,field2) values(value1,value2) 删除:delete from table1 where 范围 更新:update table1 set field1=value1 where 范围 查找:select * from table1 where field1 like ’%value1%’ ---like的语 排序:select * from table1 order by field1,field2 [desc] 总数:select count * as totalcount from table1 求和:select sum(field1) as sumvalue from table1 平均:select avg(field1) as avgvalue from table1 最大:select max(field1) as maxvalue from table1 最小:select min(field1) as minvalue from table1 11、说明:几个高级查询运算词 A: UNION 运算符 UNION 运算符通过组合其他两个结果表(例如 TABLE1和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。 B: EXCEPT 运算符 EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。 C: INTERSECT 运算符 INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。 注:使用运算词的几个查询结果行必须是一致的。 12、说明:使用外连接 A、left outer join: 左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。 SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c B:right outer join: 右外连接(右连接):结果集既包括连接表的匹配连接行, 也包括右连接表的所有行。 C:full outer join: 全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。 其次,大家来看一些不错的sql语句 1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access 可用) 法一:select * into b from a where 1>>1 法二:select top 0 * into b from a 2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用) insert into b(a, b, c) select d,e,f from a; 3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用) insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条 例子:..from b in `Server.MapPath(.)data.mdb ` where.. 4、说明:子查询(表名1:a 表名2:b) select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3) 5、说明:显示文章、提交人和最后回复时间 select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b 6、说明:外连接查询(表名1:a 表名2:b) select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c 7、说明:在线视图查询(表名1:a ) select * from (Select a,b,c FROM a) T where t.a > 1; 8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括 select * from table1 where time between time1 and time2 select a,b,c, from table1 where a not between 数值1 and 数 值2 9、说明:in 的使用方法 select * from table1 where a [not] in (‘值1’,’值2’,’值 4’,’值6’) 10、说明:两张关联表,删除主表中已经在副表中没有的信息 delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 ) 11、说明:四表联查问题: select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where ..... 12、说明:曰程安排提前五分钟提醒 SQL: select * from 曰程安排 where datediff(`minute`,f开始时间,getdate())>5 13、说明:一条sql 语句搞定数据库分页 select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段 14、说明:前10条记录 select top 10 * form table1 where 范围 15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.) select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b) 16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表 (select a from tableA ) except (select a from tableB) except (select a from tableC) 17、说明:随机取出10条数据 select top 10 * from tablename order by newid() 18、说明:随机选择记录 select newid() 19、说明:删除重复记录 Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...) 20、说明:列出数据库里所有的表名 select name from sysobjects where type=`U` 21、说明:列出表里的所有的 select name from syscolumns where id=object_id(`TableName`) 22、说明:列示type、vender、pcs字段,以type字段排 列,case可以方便地实现多重选择,类似select 中的case。 select type,sum(case vender when `A` then pcs else 0 end),sum(case vender when `C` then pcs else 0 end),sum(case vender when `B` then pcs else 0 end) FROM tablename group by type 显示结果: type vender pcs 电脑 A 1 电脑 A 1 光盘 B 2 光盘 A 2 手机 B 3 手机 C 3 23、说明:初始化表table1 TRUNCATE TABLE table1 24、说明:选择从10到15的记录 select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc 随机选择数据库记录的方法(使用Randomize函数,通过SQL语句实现) 对存储在数据库中的数据来说,随机数特性能给出上面的效果,但它们可能太慢了些。你不能要求ASP―找个随机数‖然后打印出来。实际上常见的解决方案是建立如下所示的循环: Randomize RNumber = Int(Rnd*499) +1 While Not objRec.EOF If objRec(ID) = RNumber THEN ... 这里是执行脚本 ... end if objRec.MoveNext Wend 这很容易理解。首先,你取出1到500范围之内的一个随机数(假设500就是数据库内记录的总数)。然后,你遍历每一记录来测试ID 的值、检查其是否匹配RNumber。满足条件的话就执行由THEN 关键字开始的那一块代码。假如你的RNumber 等于495,那么要循环一遍数据库花的时间可就长了。虽然500这个数字看起来大了些,但相比更为稳固的企业解决方案这还是个小型数据库了,后者通常在一个数据库内就包含了成千上万条记录。这时候不就死定了,采用SQL,你就可以很快地找出准确的记录并且打开一个只包含该记录的recordset,如下所示: Randomize RNumber = Int(Rnd*499) + 1 SQL = Select * FROM Customers Where ID = RNumber set objRec = ObjConn.Execute(SQL) Response.WriteRNumber = objRec(ID) objRec(c_email) 不必写出RNumber 和ID,你只需要检查匹配情况即可。只要你对以上代码的工作满意,你自可按需操作―随机‖记录。Recordset没有包含其他内容,因此你很快就能找到你需要的记录这样就大大降低了处理时间。 再谈随机数 现在你下定决心要榨干Random 函数的最后一滴油,那么你可能会一次取出多条随机记录或者想采用一定随机范围内的记录。把上面的标准Random 示例扩展一下就可以用SQL应对上面两种情况了。 为了取出几条随机选择的记录并存放在同一recordset内,你可以存储三个随机数,然后查询数据库获得匹配这些数字的记录:
信息发布:广州名易软件有限公司 http://www.myidp.net
|