A.填充NULL值; B.不显示地填充值; C.填充数字0; D.填充数字1; 解析:填充数字0和1是制定默认值的时候;而自动增长通常会返回1即可,也可填充NULL值或者不显示地填充值。
※使用SELECT语句时,WHERE子句必须位于GROUP子句之前,GROUP子句必须位于HAVING子句之前。
例1:在MySQL数据库中执行“SELECT 1+4-2”运算。 Mysql>select 1+4--2;
※使用*可以返回所有列的数值。
例2:查询数据库mytest中表students中学生的姓名、年龄和专业信息。 mysql> select student_name,student_age,student_major
-> from mytest.students;
例3:查询数据库mytest中表students学生的所有信息。 Mysql>select * from mytest.students;
※使用别名的方法:
例4:查询数据库mytest中表students的student_name 和student_contact字段,并且要求student_contact列用“联系方式”来显示。
mysql> select student_name,student_contact as '联系方式'
-> from mytest.students; 或者
mysql> select student_name,student_contact 联系方式
-> from mytest.students;
※计算列值:
例5:查询数据库mytest的表students,输出每个学生的student_name和student_id列,同时要求输出student_id 加上数字100后构成的新列的值。 Mysql>select student_name,student_id,student_id+100 ->from mytest.students;
※替换查询结果中的数据:在对表进行查询的时候,如果希望得到某些列的分析结果,而不仅仅是查询的原始值,则可以在SELECT语句中替换这些列。 CASE表达式:
WHEN 条件1 THEN 表达式1 WHEN 条件2 THEN 表达式2 ??
ELSE 表达式
END [AS 列名]——列名可更改也可以不更改。 例6:查询数据库mytest中表students,输出student_name 和student_sex列,判断student_sex,如果为0,则显示为“男”,否则显示为“女”,并且在结果集中用“性别”来标注该列。 mysql> select student_name, /*要记得这里的逗号*/ -> case
-> when student_sex='0' then '男'
-> else '女' -> end as '性别'
-> from mytest.students;
※聚合函数:MySQL中的内置函数,常常用于对一组值进行计算或者统计,然后返回计算或者统计结果。
例7:查询mytest中students表的年龄最大值。(这里不需要用聚合函数) Mysql>select max(student_age) from mytest.students;
※连接查询的类型以及使用方法: ①交叉连接:用于实现一张表的每一行与另一张表的每一行的笛卡尔积,返回两张表的每一行相乘的所有可能的搭配结果。
例8:假设数据库中有两张表,分别是a和b,要求查询这两张表的交叉连接后的结果集。 首先查看a表中的数据行: Mysql>select * from mytest.a; id 1 2 接着查看b表中的数据行: Mysql>select * from mytest.b; id 1 2 3 计算a表和b表交叉连接的结果:
Mysql>select * from mytest.a cross join mytest.b; id 1 1 1 2 2 2 name a1 a1 a1 a2 a2 a2 id 1 2 3 1 2 3 name b1 b2 b3 b1 b2 b3 name b1 b2 b3 name a1 a2 ※内连接:利用条件表达式来消除交叉连接中的某些数据行,在FROM子句中使用关键字INNER JOIN连接两张表,并使用ON子句来设置连接条件。如果没有任何条件的话,INNER JOIN和 CROSS JOIN在语法上是等同的,两者可以互换。
需要注意的是:内连接是系统默认的表连接,所以在from子句后可以省略INNER关键字. 例9:在例7的表中,利用内连接查询出a表Id大于b表Id的结果集。 Mysql>select * from mytest.a inner join mytest.b on mytest.a.Id >mytest.b.Id;
※相等连接:使用运算符“=”
例10:在例8的表中,利用内连接查询出a表Id等于b表Id的结果集。 Mysql>select * from mytest.a inner join mytest.b on
->mytest.a.Id=mytest.b.Id;
※不等连接:内连接的一种,只是在ON子句中的连接条件使用除“=”的其他运算符。 ※自连接:内连接的一种,如果需要在一个表中查找具有相同列值的行,则可以考虑用自连接。
※自然连接:自然连接是只有在连接的列在两张表中的名称都相同时才会有用,否则返回的会是笛卡尔积。自然连接在FROM子句中使用关键字NATURAL JOIN。
※外连接:外连接分为左外连接和右外连接,首先将连接的表分为基表和参考表,然后再以基表为依据返回满足条件和不满足条件的记录。 ※关于特殊的比较运算符“<=>”的说明: 对于运算符“<=>”,当两个表达式彼此相等或者都等于空值的时候,比较的结果值为TRUE;若其中一个是空值或者都是非空值但却不相等时,则为FALSE,不会出现UNKNOWN的情况。
例11:查找数据库mytest的表students,输出所有女生的信息。 Mysql>select * from mytest.students
->where student_sex='1'; ※字符串匹配
通配符有以下两种:
①%:%可以表示任何字符串,并且该字符串可以出现任意次数。
例12:查询数据库mytest中表students,输出所有姓“李”的学生姓名和ID。 Mysql>select student_name,student_id from mytest.students
->where student_name like '李%';
②下划线'_':下划线只匹配单个字符,而不是多个字符,也不是0个字符。 例13:查询数据库mytest中students,输出姓‘李’并且姓名只有两个中文字符的学生名字。 Mysql>select student_name from mytest.students
->where student_name like '李_';
※文本匹配; ①基本字符匹配:
例14:查询数据库mytest中students,分别使用字符串匹配和文本匹配的方式,输出专业含有“物”字的学生信息。(学生信息包括名字、年龄和专业) ?采用百分号匹配:
Mysql>select student_name,student_age,student_major
->from mytest.students where student_major like '%物%'; ?采用正则表达式regexp匹配:
Mysql>select student_name,sttudent_age,student_major
->from mytest.students where student_major regexp '物'; ——这里可以在“[物]”左右括号。 ②选择匹配:正则表达式而已达到待搜索对象的选择性匹配,使用‘|’分隔符提供选择匹配的字符串,该分割符类似于在SELECT语句中使用OR子句。
例15:查询数据库mytest的表students,输出“自动化专业”或者“数学专业”的学生姓名。 mysql> select student_name,student_major
-> from mytest.students where student_major regexp '自动化专业|数学专业';
LIKE和REGEXP的区别:LIKE严格受单引号之间的内容查询,有没有百分号对于选择结果而言至关重要。
③范围匹配:正则表达式还可以在某一个范围内对数据进行过滤,使用“【】”包含字符或者数字集合。如果表示范围4-6则可以表示为'[4-6]'.
例16:查询数据库mytest的表students,输出年龄中含有数字4或5的学生信息。(这里的学生信息包括名字和年龄)
mysql> select student_name,student_age
-> from mytest.students where student_age regexp '[4|5]';
④特殊字符匹配;如果要在列值中查找具有这些特殊含义的字符的时候,需要用到转义字符“\\\\”。具体方法是将其作为前导,例如正则表达式中如果出现“\\\\-”则表示查找字符“-”,正则表达式中为了查找反斜杠\\本身,则需要使用“\\\\\\”; “\\\\f”——换页;“\\\\r”——回车;“\\\\t”——制表;“\\\\v”——纵向制表。
⑤重复匹配:正则表达式支持重复元素匹配。即用某些字符来表示要匹配的元素重复的次数。 元字符 * + ? {n} {n,} {n,m} 说明 0个或者多个匹配 1个或者多个匹配 0个或者1个匹配 指定n个匹配 不少于n个匹配 匹配的数目在n和m之间(m不可超过255) 例17:查询数据库mytest中表students,输出学生名字含有两个“圆”的学生信息。 Mysql>select student_name,student_age,student_major
->from mytest.students where student_name regexp '[圆]{2}';
⑥字符类匹配:例如字符类'[:upper:]'表示任意大写字母,如同在正则表达式中的'[A-Z]'. ⑦使用定位符匹配:
定位符 ^ $ [[:<:]] [[:>:]] 说明 文本开始 文本结尾 词的开始 词的结尾 例18:查询数据库mytest 中表students,输出“生”开头的专业名称的学生姓名、专业。 Mysql>select student_name,student_major
->from mytest.students where student_major regexp '^[生]';
※判定范围:
①BETWEEN?AND
例19:查询数据库mytest的表student,输出年龄为20到23岁之间学生的姓名、专业。 Mysql>select student_name,student_major
->from mytest.students where student_age between 20 and 23; ②IN
例20:查询数据库mytest中students表,输出年龄为23岁和24岁之间的学生姓名。 首先解决以下问题:
mysql> select student_name,student_age
-> from mytest.students where student_age regexp '[23|24]'; +--------------+-------------+ | student_name | student_age | +--------------+-------------+
| 李芳 | 25 | | 李明 | 22 | | 张三 | 24 | | 王五 | 23 | | 李芳 | 23 | | 孙艺华 | 22 | | 范圆圆 | 21 | +--------------+-------------+
为什么不可以?因为REGEXP是只要出现单引号内条件的都会被筛选出来,而23|24都存在2,所以只要包含2就会被选出来。——其筛选灵活程度极强。 所以此程序应该是:
mysql> select student_name,student_age from mytest.students -> where student_age regexp '[3|4]'; 或者使用IN:
Mysql>select student_name,student_age from mytest.students
->where student_age in (23,24);
※判定空值:关键字IS NULL可以用来判断一个表达式是否为空值。 例21:查询数据库mytest中表students,输出联系方式为空的学生姓名。 Mysql>select student_name ,student_contact from mytest.students
->where student_contact is null; ※子查询:
①IN子查询,比如<表达式> [not ] in <子查询> ②比较运算符子查询:
<表达式>{=|<|<=|>|>=|<=>|<>|!=}{ALL|SOME|ANY}<子查询>
ALL、SOME、ANY:可选项。ALL表示指定表达式需要与子查询结果集中的每个值进行比较;
SOME和ANY是同义词,表示表达式只要与子查询结果集中的某个值满足关系即可返回TRUE。
③EXIST子查询:判断子查询结果集是否为空,如果存在子查询的结果则返回TRUE。 ※GROUP BY :
<位置>:通常后面接一个正整数,比如GROUP BY 2的意思是根据SELECT选择列清单上的第二列的值进行分组。
ASC|DESC:ASC表示升序分组,DESC表示降序分组。
例22:在数据库mysql中表students中获取一个结果数据集,要求该结果集以性别分组,并且统计男生和女生的人数。
Mysql>select student_sex,count(*) as '人数'
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库计算机二级MySQL基本知识点(3)在线全文阅读。
相关推荐: