关于cmd中输入中文,可以在cmd中输入chcp查看当前使用的是那种语言的,最常用的就是65001和936,65001设置编码显示为utf8格式,936是简体中文的代码。为了可以在cmd中输入中文可以在cmd中输入chcp 936
select语句的使用非常广泛,也可以用来检索不引用任何表的计算行,例如直接用select计算两个整数的和:
在mysql中使用select的基本语法:
select [straight_join] [sql_small_result] [sql_big_result]
[high_priority]
[distinct | distinctrow | all]
select_expression, ……
[into {outfile | dumpfile} ‘file_name’ export_options]
[from table_references
[where where_definition]
[group by col_name, …]
[having where_definition]
[order by {unsigned_integer | col_name | formula} [asc | desc] , …]
[limit [offset,] rows]
[procedure procedure_name] ]
其中select_expression表示需要查询的字段名,table_references表示从此处指定的表或视图中查询数据,where where_definition表示指定查询条件,col_name表示按照指定的字段进行分组,having where_definition表示满足这个条件的表达式才能输出,order by按照指定的字段排序,asc为顺序,desc为逆序,procedure procedure_name表示指定的存储过程名称。
注:使用select语句,所有要使用的关键字必须精确地按照上面的顺序指定,否则会出错。
查询指定字段:
select 查询字段1,查询字段2,……from table_name;
查询所有字段:
select * from table_name;
*代表所有字段,也可以在select后边列出所有的字段,但是比较麻烦。
先创建一张表,并添加了一些数据:
大多数情况下,需要按照条件完成查询:
select 查询字段 from table_name where 条件表达式;
在比较条件中<>表示不等于,等价于!= , between add 用法为:
where 字段名 [not] between 取值1 add 取值2;
between add 的取值范围是大于等于“取值1”小于等于“取值2”,not between add的取值范围与between add相反。
这里选择double类型的字段flowerMarketPrice的取值范围为[200,310]
in的用法:
[not] in (元素1、元素2、元素3, … , 元素n)
in可以判断某个字段的值是否在指定的集合中。
这里选择float类型字段flowerCurrentPrice的值在集合[128,558,618,999]中的数据。
and 和or 的用法:
条件表达式1 and/or 条件表达式2 [… and/or 条件表达式n];
and 和 or 都用来联合多个查询条件,and为交集,or为并集。
like的用法:
like用来判断是否与指定的字符串匹配: [not] like ‘字符串’;
‘字符串’必须添加单引号或者引号,字符串的参数值可以是一个完整的字符串,也可以是包含百分比或者下划线的统配字符。
可以通过group by实现分组查询,将查询的结果按照某个字段或者多个字段进行分组,指定字段值相同的为一组:
group by 字段名 [having 条件表达式] [with rollup]
字段名是多个的时候中间用逗号分隔。“having条件表达式”和with rollup都是可选的,满足having条件表达式的将会被显示出来,with rollup会在所有记录的最后加上一条,该记录是上面所有记录的总和。
按照int类型字段flowerTypeId值group by
一般情况下having语句和group by一起使用,可以限制查询结果显示的情况,和where条件查询类似。但是where作用于表或者视图,having作用于分组后的记录,用于选择满足条件的分组。
分组后选择flowerMarketPrice大于等于300的。
数据库中查询出来的语句可能是无序的,或者排列顺序不是我们所期望的,通常需要按照某个字段来排序,这就用到排序了:
order by 字段名 [asc | desc]
asc:顺序(由小到大) desc:逆序(由大到小)
按照flowerMarketPrice值顺序排列。
limit可以指定查询结果从哪条记录开始,也可指定显示多少条数据。
limit [初始位置,] 查询记录数量
“初始位置”指定从哪条记录开始显示,从0开始。如果是从第一条记录开始显示,则初始位置为1。
按照flowerMarketPrice顺序排序后,查询第3、4两条数据(从第2+1条数据开始查询,查询两条)。
外连接查询可以查询两个或两个以上的表,与内连接查询相似,当该字段值相等的时,可以查询出该表的记录;此外该字段值不相等的记录也可以查询出来。分为左外连接查询和右外连接查询,通过outer join关键字实现:
select 字段表 from 表1 left|right [outer] join 表2 on 表1.字段=表2.字段
上述代码等价于以下代码:
select a.字段1,b.字段1 from 表1 as a left|right [outer] join 表2 as b on a.字段=b.字段
子查询是将一个查询语句嵌套在另一个查询语句中,内层查询语句的结果可为外层查询语句提供查询条件。可实现多个表之间的查询。
子查询中可以包括in、not in、exists、not exists、any和all关键字,也可以通过比较运算符(如=、!=、>=、<=等)进行查询。
这里是在student表中找到sname为‘liming’的sid,找出flowerinfo表中flowerTypeId和sid相等的数据。
一个查询语句的条件可能落在另一个select语句的查询结果中,这时可以通过in关键字进行判断。
查询出了student表中sid与flowerinfo表中flowerTypeId相等的数据。
使用exists关键字时,内层查询语句不反悔查询的记录,返回一个真假值,内层返回真值,外层查询语句将会进行查询,而内层查询返回假值时,外层查询语句不进行查询或者查询不出来任何记录。
all关键字表示满足所有条件,使用该关键字时,只有满足内层查询语句返回的所有结果,才能执行外层查询语句。
一般all会和比较运算符一起使用,如: >=all表示大于等于所有值。
这里查询student表中sid>=flowerinfo表中所有flowerTypeId的值。
关于正则表达式可以在这个网站学习,里边还有一个校验器:
http://www.jb51.net/tools/zhengze.html
mysql中使用正则表达式查询使用regexp关键字:
字段名 regexp “匹配方式”;
从student表中选择出sname以“li”开头或者以“i”结尾的数据。
语法:
insert into 表名[(字段名列表)] values(字段值1,字段值2,…,字段值n)
语法:
insert into 表名 [(字段名列表)] values(取值1),(取值2),…,(取值n);
语法:
insert into 表名1(字段名列表) select 字段名列表2 from 表名2 where 条件表达式;
mysql中通过update语句来更新已有的数据:
update 表名 set 字段1=值1,字段2=值2,……,字段n=值n where 条件表达式
语法:
delete from 表名 [where 条件表达式]
删除符合条件的数据
还有一种方法是:
truncate table 表名;//删除表中所有数据
参考书目:《MySQL5 数据库应用入门与提高》侯振云、肖进 编著——清华大学出版社