mysql 检索操作时间段_常用SQL 操作 以及MYSQL的运算符、字符串操作、时间函数、全文检索...

===语句===

DISTINCT用于返回唯一不同的值

对指定列进行返回组合的唯一

SELECT DISTINCT `userRole`, `userChannel`,`userInviteUid` FROM `t_user`

LIKE 操作符 _,%

SELECT * FROM Persons WHERE City LIKE 'N%'

注:在用索引时,支持用 '字符%/_'

IN 操作符允许我们在 WHERE 子句中规定多个值

SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...)

BETWEEN 操作符 值可以是数值、文本或者日期;包括两头

SELECT * FROM Persons WHERE LastName BETWEEN 'Adams' AND 'Carter'

SELECT * FROM Persons WHERE LastName NOT BETWEEN 'Adams' AND 'Carter'

JOIN

LEFT JOIN

SELECT * FROM `A` LEFT JOIN `B` ON `A`.aID = `B`.bID

是以A表的记录为基础的,left join是以左表为准的.

左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).

B表记录不足的地方均为NULL.

SELECT a.`id`, a.`title`, a.`createdTime`, a.`contents`, u.userId, u.`userName`, g.score

FROM `article` a

LEFT JOIN `user` u ON a.createdUser = u.userId

LEFT JOIN `grade` g ON a.gameId = g.elementId AND u.userId = g.userId

WHERE a.gameId = 2 AND a.typeId = 1 AND a.status = 1 AND g.type = 1

ORDER BY a.id DESC

LIMIT 4#update left join 的使用UPDATE A LEFT JOIN B ON A.`id` = B.`aid`

SET A.`status`=0

WHERE A.`id` = 1 AND B.`status` = 1 AND B.`status` = 2

RIGHT JOIN

SELECT * FROM `A` LEFT JOIN `B` ON `A`.aID = `B`.bID

以右表(B)为基础的,A表不足的地方用NULL填充

INNER JOIN

SELECT * FROM `A` INNER JOIN `B` ON `A`.`A`ID = `B`.bID

只显示符合条件的记录,即列出A、B都有的。(INNER JOIN 与 JOIN 相同)

FULL JOIN

SELECT * FROM `A` FULL JOIN `B` ON `A`.`A`ID = `B`.bID

只要其中某个表存在匹配(返回所有的行),FULL JOIN 关键字就会返回行

UNION 操作符用于合并两个或多个 SELECT 语句的结果集 UNION ALL

SELECT column_name(s) FROM table_name1

UNION

SELECT column_name(s) FROM table_name2

SELECT COUNT(column_name) FROM table_name

COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入)

SELECT MIN(column_name) FROM table_name

AVG(),MAX(), MIN(),SUM()函数

SELECT Customer,SUM(OrderPrice) FROM OrdersGROUP BY CustomerHAVING SUM(OrderPrice)<2000

HAVING 子句

GROUP BY 语句合计函数 (比如 SUM) 常常需要添加 GROUP BY 语句

======

日期时间

NOW() 返回当前的日期和时间

CURDATE() 返回当前的日期

CURTIME() 返回当前的时间

UNIX_TIMESTAMP(date) 获取unix时间截

SELECT DATE('2008-12-29 16:25:46.635')

DATE(date) 提取日期或日期/时间表达式的日期部分

SELECT EXTRACT(YEAR FROM '2008-12-29 16:25:46.635')

EXTRACT(unit FROM date) 返回日期/时间按的单独部分

SELECT DATE_ADD('2008-12-29 16:25:46.635',INTERVAL 2 DAY)

DATE_ADD(date,INTERVAL expr type) 给日期添加指定的时间间隔

DATE_SUB(date,INTERVAL expr type) 从日期减去指定的时间间隔

SELECT DATEDIFF('2009-12-30','2008-12-29') AS DiffDate

DATEDIFF(date1,date2) 返回两个日期之间的天数

SELECT DATE_FORMAT(NOW(),'%Y %m %d %h:%i %s')

DATE_FORMAT(date,format) 用不同的格式显示日期/时间

字符串味道

SELECT LCASE(column_name) FROM table_name

UCASE 函数把字段的值转换为大写

LCASE 函数把字段的值转换为小写

SELECT MID(`login`, 1, 3) from `user`

MID(c,start[,end]) 函数用于从文本字段中提取字符,MID(column_name,start[,length]),start从1开始

SUBSTRING(c,start[,end]), substring(),同MID

LEFT(c,number_of_char)

RIGHT(c,number_of_char)

SELECT ROUND(column_name,decimals) FROM table_name

ROUND(c,decimals) 函数用于把数值字段舍入为指定的小数位数。decimals小数位数

FORMAT(c,format)

===================================================================

运算符###########################################

=,!=(<>),>,>=,

流程#############################################

mysql> select ifnull(1,0); #如果第一个参数为NULL,则返回第二个参数值,否则返回原值.

------------------------------------------------

mysql>select case 1 when then 'one' when 2 when 'two' else 'more' end;

------------------------------------------------

mysql>select if(1>0,'ok','no') #如果条件为真则返回OK,否则返回NO.

------------------------------------------------

mysql>select nullif(1,2) #如果exp1 = exp2则返回NULL,否则返回exp1

------------------------------------------------

字符串###########################################

mysql>select ASCII('a'); #返回字符串最左边那个字符的ASCII码值

-----------------------------------------------

mysql>select oct(12); #返回字符串表示的八进制形式.

-----------------------------------------------

mysql>select hex(255); #返回字符串的十六进制形式.

-----------------------------------------------

mysql>select char(3333342); #返回ASSCII码值对应的字符串

------------------------------------------------

mysql>select char_length('text') #返回字符串的个数

------------------------------------------------

mysql>select length(text) #返回字符串的字节数

________________________________________________

mysql>select concat('str1','str2','str3','str4','strn',) #将参数连接成字符串返回

-------------------------------------------------

mysql>select locate('字串','母串') #返回字串在母串中第一次出现的位置,如果不存在则返回0

-------------------------------------------------

mysql>select lpad('str',11,'.');

mysql>select rpad('str',11,'.'); #用字符串对str进行左边或右边填充直到他的长度达到11.

-------------------------------------------------

mysql> select left('strstrstr',5); #返回字符串最左边的N个字符. mysql>select right('strstrstr',5); #返回字符串最右边的N个字符.

-------------------------------------------------

mysql> select substring('xxxxxx',3,3); #从字符串的第三个字个位置起截取三个字符.

-------------------------------------------------

mysql> select ltrim(str);

mysql>select rtrim();

mysql> select trim(' str ');

mysql> select trim(both 'x' from 'xxx..xxx'); #去空格

-------------------------------------------------

mysql> select space(6); #返回门个空格

-------------------------------------------------

mysql> select repeat('str',3); #返回重复三次的字符串

-------------------------------------------------

mysql>select replace('www.tom.com','tom','sina'); #字符串替换

-------------------------------------------------

mysql>select reverse('abc'); #字符串颠倒

-------------------------------------------------

mysql>select lower('UPPER');

mysql>select upper('lower'); #转换大小写

--------------------------------------------------

mysql> update table set filed = load_file('/tmp/file'); where id=1; #读入文件

--------------------------------------------------

mysql> select abs(-1); #返回绝对值

--------------------------------------------------

mysql> select 4 div 2; #除

--------------------------------------------------

mysql> select 5 mod 2; #余

--------------------------------------------------

mysql> select floor(x) #返回不大于X的最大整数值

--------------------------------------------------

mysql> select ceiling(x) #返回大于X的最小整数

--------------------------------------------------

mysql> select round(2.23) #四舍五入

__________________________________________________

时间 mysql>select now(); select now() + 0; #返回时间

--------------------------------------------------

mysql>select curdate(); select curdate() + 0; #返回年月日

--------------------------------------------------

mysql>select curtime(); select curtime() + 0 #返回小时分秒

--------------------------------------------------

mysql>select database() #返回当前数据库的名子

--------------------------------------------------

mysql>select user();

select system_user();

select session_user(); #返回当前MYSQL用户名子

---------------------------------------------------

mysql>select password('abc'); #口令加密

---------------------------------------------------

删除所有表记录 #truncate table 表名;

#速度快于delete from table

---------------------------------------------------

加载数据 load data infile /PATH/文件 into table || mysqlimport dbname /PATH/file.txt 相关命令参数如下:

Usage: mysqlimport [OPTIONS] database textfile... --print-defaults 输出程序参数并退出,该选项为缺省值

--no-defaults 不读入缺省参数,该选项为缺省值

--defaults-file=# 从给定的文件中读入参数

-d, --delete 删除表中元素

--fields-terminated-by=name 每个元素之间的分隔符

--fields-enclosed-by=name 将每个元素括起来的符号

-f, --force 如果有sql错误也继续执行 -?,

--help 显示帮组并退出 -h,

--host=name host的名字 -i,

--ignore 如果有重复的行,保持原行

--ignore-lines=# 忽略开始n行

--lines-terminated-by=name 每行元素分隔符

-p, --password[=name] 连接host时使用的密码 -r,

--replace 如果key重复,使用新行代替原行 -u,

--user=name 用户名

----------------------------------------------------------

全文搜索怎么建立?

例如: create table mytable ( name varchar(10), address text, fulltext(name,address) );//OK搞定了

----------------------------------------------------------

MYSQL全文搜索(FULLTEXT 索引用于 MyISAM 表,可以在 CREATE TABLE 时或之后使用 ALTER TABLE 或 CREATE INDEX 在 CHAR、VARCHAR 或 TEXT 列上创建)

例: mysql>select * from table where match(字段一,字段二,字段三) against('要搜索的关键字');

------------------------------------------------------------

MYSQL逻辑全文检索?

呵呵 是像这样地: mysql> select * from table where match(字段一,字段二...) against('+要找的数据-不要找的数据');

---------------------------------------------------------

补充逻辑全文检索: against里边还可以有什么东东?(1)数据1 数据2: 表示要找到资料当中至少包含数据1或数据2(两数据有一个即可) (2)+ 数据1 +数据2:表示两个数据都要包含在内 (两数据必须同时存在)

----------------------------------------------------------

MYSQL' 查询缓存'是什么东东接着砍砍?优点?对于执行大量相同SELECT的操作来说这个东西可以提高查询效率(传说是百分之一秒,现在用的MYSQL是 5.0,也许5.0.24会不同了呢?),MYSQL执行查询的时候他会在内存中留下以往查询的语句,这样如果下次有相同的查询时就直接调用这个(前提条 件这些查询语句必须完全相同!差一点都不行严格到按字节匹配,MYSQL还不支持模糊,并且有过期时间是动态更新的),其实同个SELECT不是这么简单 的,他也要经过许多的步骤 --》对 MYSQL服务器而言,所以下一个脚本里加上这个功能吧.

------------------------------------------------------------

如何查看环境变量查询缓存是否开始?其他状态查询方相同的 mysql>show variables like 'have_query_cache'; mysql>show variables ; //显示所有状态 mysql> show variables like '%关键字%' ==>模糊查找。。。。

----------------------------------------------------------

mysql>select sql_cache 字段一,字段二 from table; 指定此语句缓存

'''''sql_no_cache''''''''''''''''''''';。。。。。不缓存

---------------------------------------------------------

缓存查询结果的最大值也可自己设置

mysql> set @@global.query_cache_limit=1024; mysql> select @@query_cache_limit;

------------------------------------------------------------

整理缓存。。。相当于硬盘的磁盘清理,不过不要担心,这个不会清掉缓存中的查询

mysql> flush query cache;

------------------------------------------------------------

清空cache ===》这个是会清掉缓存中的所有查询!

mysql> reset query cache ; ==== mysql> flush tables;

----------------------------------------------------------

查看缓存状态,

show status like 'qcache%'

----------------------------------------------------

禁止查询缓存

set session query_cache_type = off;

----------------------------------------------------

更改用户密码:

1. mysqladmin -uuser password mima;

2.mysql> set password for root=password('abcdefg');

3.mysql> update user set password=password('abcdef')

where user='user1'

--------------------------------------------------

数据导入:

mysql> load data infile '/path/file' into table mytable;

or mysqlimport dbname /path/file.txt

mysqldump --opt dbname > db.sql

mysqldump --opt dbname table1 table2 > 导出库中的两张表

mysqldump --databases db1 db2 > 多个数据库备份

1.导出整个数据库

mysqldump -u 用户名 -p 数据库名 > 导出的文件名

mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql

2.导出一个表

mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名

mysqldump -u wcnc -p smgp_apps_wcnc users> wcnc_users.sql

3.导出一个数据库结构

mysqldump -u wcnc -p -d --add-drop-table smgp_apps_wcnc >d:wcnc_db.sql

-d 没有数据 --add-drop-table 在每个create语句之前增加一个drop table

4.导入数据库

常用source 命令

进入mysql数据库控制台,

如mysql -u root -p

mysql>use 数据库

然后使用source命令,后面参数为脚本文件(如这里用到的.sql)

mysql>source d:wcnc_db.sql (注:如果写成source d:\wcnc_db.sql,就会报语法错误)

--------------------------------------------------

优化表:

mysql>optimize table;

------------------------------------------------

消除数据表中的重复数据:

select distinct 字段 from 表名;

---------------------------------------------------------------

查出服务器支持哪个存储引擎

mysql> SHOW ENGINES;

SELECT a.`id`, a.`title`, a.`createdTime`, a.`contents`, u.userId, u.`userName`, g.score

FROM `article` a

LEFT JOIN `user` u ON a.createdUser = u.userId

LEFT JOIN `grade` g ON a.gameId = g.elementId AND u.userId = g.userId

WHERE a.gameId = 2 AND a.typeId = 1 AND a.status = 1 AND g.type = 1

ORDER BY a.id DESC

LIMIT 4

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2011-05-23 17:25

浏览 705

评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值