like操作符 %匹配任意个字符 select prod_name,prod_price from products where products where prod_name like ‘jet%’ 以jet开头 select prod_name,prod_price from products where products where prod_name like ‘%jet’ 以jet结尾 select prod_name,prod_price from products where products where prod_name like ‘%jet%’ 任何包含jet的 select prod_name,prod_price from products where products where prod_name like ‘s%e’ 以s开头,以e结尾 下划线匹配单个字符(一定是单个字符) select prod_name,prod_price from products where products where prod_name like ‘s_e’ 以s开头,以e结尾,中间一个单词,sae 通配符使用技巧 1.不能过度使用通配符,如果其他操作符能达到相同的目的,应使用其他操作符 2.在确实需要使用通配符时,除非绝对有必要,否则不要把他们用在搜索的开始处。把通配符用于搜索的开始处是最慢的。 正则表达式 检索含文本1000的所有的行 select prod_name,prod_price from products where products where prod_name regexp ‘1000’ order by prod_name 检索含文本1000的所有的行 select prod_name,prod_price from products where products where prod_name regexp ‘.000’ order by prod_name 匹配含文本1000、2000、3000这些 Or匹配 select prod_name,prod_price from products where products where prod_name regexp ‘1000|2000’ order by prod_name 匹配几个字符之一 select prod_name,prod_price from products where products where prod_name regexp ‘[123]ton’ order by prod_name 匹配1 ton或者2 ton或者 3 ton 匹配范围 select prod_name,prod_price from products where products where prod_name regexp ‘[1-5]ton’ order by prod_name
匹配特殊字符,为了匹配特殊字符,必须用\\为前导 \\-表示查找-, \\.表示查找. Select vend_name from vendors where vend_name regexp ‘\\.’ Order by vend_name 使用数据处理函数 Upper()将文本转换成大写 left()返回串左边的字符 Length()返回串的长度 Locate()返回串的一个子串 Lower()将串转换成小写 lTrim()去掉串左边的空格 Right()返回串右边的字符 Rtrim()去掉串右边的空格 soundex()返回串的soundex值 substring() 返回子串的字符
以下是soundex()的使用实例
时间函数
如下例
如果你仅仅想要日期,则使用Date()是一个很好的习惯,因为可能是‘2005-09-01 11:30:30;
更可靠的输入为
聚集函数用来汇总数据
聚集不同的值可以用distinct
组合聚集函数
数据分组 group by
过滤分组having
列出至少有两个订单的所有顾客
where在分组前进行过滤,having在分组后进行过滤。
where字句过滤掉所有prod_price小于10的数据,然后再按vend_id进行分组,然后过滤掉分组数小于2的
select子句的顺序
select from where(行级过滤) group by(分组) having(组级过滤) order by ( 输出排序顺序) limit(要检索的行数)
子查询:即嵌套在其他查询中的查询,如下例子
1 查询每门课程成绩都大于80分学生的学号 数据库 表 student name score course A 85
语文 A 75 数学 A 82 英语 B 75 语文 B 89 数学 B 79 英语 天使美眉90 语文 天使美眉100 数学 天使美眉100 英语 请找出每门课程都超过80分的那个人名字的SQL语句
1.select name from student group by name having min(score)<=80;2.select name from student group by name having name not in(select distinct name from student where score<= 80)
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
MySQL连表update
设想两张表,如下
table A
field id
field name
table B
field id
filed my_name
现在希望将表B中的my_name中的内容“拷贝”到表A中对应的name字段中,表A中的记录与表B中的记录通过id对应。首先我们来连表查询一下:
SELECT a.id, a.name, b.my_name FROM A a, B b WHERE a.id = b.id 根据连表查询,可以和容易的转为连表Update,思路类似,如下: UPDATE A a, B b SET a.name = b.my_name WHERE a.id = b.id