SQL查询语句

MySQL中select的基本语法形式:

Select 属性列表from 表名[where 条件表达式1][group by 属性名1 [having 条件表达式2]]

[order by 属性名2 [asc | desc]]

先输入show databases; 查看之前创建好的tel数据库,随后使用use命令切换到tel数据库

输入select * from tbox;查看表中的内容

此时,如果我们要查看sbm节点的start_bit_position 和 signal_length的信息,可以使用此sql语句select ecu_id,start_bit_position,signal_length from tbox; 即可单独显示

如果要查找signal_max_value 大于50 的记录并且让搜索结果按照降序排列,输入select ecu_id,signal_max_value from tbox where signal_max_value>50 order by signal_max_value desc;

如果想筛选时,去掉重复的值,可以这样:例如,要去掉signal_min_value 的重复值,输入select distinct signal_min_value from tbox;

如果想查询哪一个ecu的signal_length是40,可以使用where的条件表达式,输入select ecu_id,signal_length from tbox where signal_length=40; 得到相对应的ecu是sbm。注意,此处的“=”可以被替换为like关键字,但当字符串中包含通配符时,“=”不能代替like

如果想查询某个字段的值是否在指定的整合中。如果字段的值在集合中,则满足查询条件,该记录将被查询出来;如果不在集合中,则不满足查询条件。可以使用in关键字。例如,要筛选出查询出哪些ecu的start_bit_position 的值是24和32,则可以输入select ecu_id,start_bit_position from tbox where start_bit_position in (24,32);

如果要判断字段的值是否在指定范围,则可以使用between关键字。例如,要判断哪些ecu的start_bit_position的值在8和34之间,则可以输入select ecu_id,start_bit_position from tbox where start_bit_position between 8 and 34;

如果要用通配符的方式判断数值,则可以使用%通配符。注意,如果是要匹配单个字符,则可以用_代替% 例如,要筛选出哪些ecu的start_bit_position值是4开头的,则可以输入 select ecu_id,start_bit_position from tbox where start_bit_position like '4%';

如果要联合多个条件进行查询,例如要查询start_bit_position中以2开头和signal_max_value是1的ecu,则可以输入select ecu_id,start_bit_position,signal_max_value from tbox where signal_max_value = 1 and start_bit_position like“2%”;

如果只要满足几个查询条件中的其中一个,例如要查询start_bit_position值大于30或者signal_max_value 大于50的,则可以输入select ecu_id,start_bit_position,signal_max_value from tbox where start_bit_position>30 or signal_max_value>50;

当需要同时使用and和or关键字,and的优先级要高于or,例如要查询start_bit_position值大于30和signal_max_value 大于50或者signal_length是13的,则可以输入select ecu_id,start_bit_position,signal_length,signal_max_value from tbox where start_bit_position>30 and signal_max_value>50 or signal_length=13;

如果要限制查询结果的数量,可以使用limit关键字,例如要从查询第一行开始查询,且只查询两行,则可以输入

select ecu_id,start_bit_position,signal_length,signal_min_value,signal_max_value from tbox limit 0,2;

注意:

limit n,m

n:开始位置

m:要检索的行数

行0 :检索出来的第一行为行0,而不是行1,

因此,limit 1,1将检索出第二行而不是第一行。

如果要对查询结果进行排序,则可以order by关键字,其中ASC:升序(默认升序)

DESC:降序。例如现在要按照start_bit_position进行升序排序,则可以输入select ecu_id,start_bit_position from tbox order by start_bit_position;

如果要进行降序排序,则可以输入select ecu_id,start_bit_position from tbox order by start_bit_position desc;

如果想找出一列中最高或者最低的值,则可以将order by 和limit关键字来联合使用。

例如如果想查询start_bit_position中对应哪个ecu的最小值,则输入select ecu_id,start_bit_position from tbox order by start_bit_position limit 1;

相反,要找出对应ecu的最大值,则输入select ecu_id,start_bit_position from tbox order by start_bit_position desc limit 1;

如果要分组查询,则可以使用group by 关键字。例如要按照signal_length进行分组,则可以输入select signal_length from tbox group by signal_length;

如果想分组后的结果按条件进行筛选,则可以使用having关键字,在order by关键字后门加上having关键字和等式。例如像上面的例子,输入select signal_length from tbox group by signal_length having signal_length=3;

集合函数

包括COUNT()、SUM()、AVG()、MAX()和MIN()。

当需要对表中的记录求和、求平均值、查询最大值和查询最小值等操作时,可

以使用集合函数。GROUP BY关键字通常需要与集合函数起使用。

COUNT()用来统计记录的条数;

SUM()用来计算字段的值的总和;

AVG()用来计算字段的值的平均值:

MAX() 用来查询字段的最大值;

MIN()用来查询字段的最小值。

如果要统计记录的条数,则可以使用count()关键字。例如要统计有几条数据,则可以输入select count(*) from tbox;

由结果得出,总共有十条

如果要计算字段值的综合,则可以使用sum()关键字。例如要统计start_bit_position的总和,则可以输入select sum(start_bit_position) from tbox;

如果要计算字段值的平均值,则可以使用avg()关键字。例如要统计start_bit_position的平均值,则可以输入select avg(start_bit_position) from tbox;

如果要计算字段值的最大值,则可以使用max()关键字。例如要统计start_bit_position的最大值,则可以输入select max(start_bit_position) from tbox;

如果要计算字段值的最小值,则可以使用min()关键字。例如要统计start_bit_position的最小值,则可以输入select min(start_bit_position) from tbox;

正则表达式

是用某种模式去匹配一类字符串的一一个方式。例如,使用正则表达式可以查询

出包含A、B和C其中任一字母的字符串。正则表达式的查询能力比通配字符的查询能

力更强大,而且更加的灵活。正则表达式可以应用于非常复杂查询。

使用REGEXP关键字来匹配查询正则表达式。其基本形式如下:

属性名 REGEXP '匹配方式’

“属性名”参数表示需要查询的字段的名称;

“匹配方式” 参数表示以哪种方式来进行匹配查询。

如果要查询以特定字符或者字符串开头的记录,则可以使用^关键字。例如要统计ecu_id以b开头的ecu,则可以输入select * from tbox where ecu_id regexp ’^b’;

如果要查询以特定字符或者字符串结尾的记录,则可以使用$关键字。例如要统计ecu_id以m结尾的ecu,则可以输入select * from tbox where ecu_id regexp ’m$’;

如果要查询以特定字符或者字符串的任意字符,则可以使用’.’关键字。例如要统计ecu_id以s匹配任意字符的ecu,则可以输入select * from tbox where ecu_id regexp ’^s.’;

注:“.”和“_”的区别

两个都可以代替任意一个字符进行查询。

“.”只能用于regexp关键字进行匹配

“_”不能用于regexp关键字进行匹配

[]可以指定集合的区间,例如要统计ecu_id包含a和b字符的ecu,则可以输入select * from tbox where ecu_id regexp ‘[a-b]’;

这里还有一种写法,是用|代替-也是可行的输入select * from tbox where ecu_id regexp ‘[a|b]’;

如果想要查询以a和b开头的ecu,则可以输入select * from tbox where ecu_id regexp ‘^[a-b]’;

如果要查询所有包含0个或者多个“b”的ecu名称,则可以输入select * from tbox where ecu_id regexp 'b*';则可以全部查询得到

如果要查询所有包含1个或者多个“b”的ecu名称,则可以输入select * from tbox where ecu_id regexp 'b+';

如果要查询signal_length中值1出现1次的,则可以输入select * from tbox where signal_length regexp '1{1}';

如果要查询signal_length中值1出现2到3次的,则可以输入select * from tbox where signal_length regexp '1{2,3}';此时查询不到任何数据,因为没有数据符合要求

MySQL运算符

可以指明对表中数据所进行的运算。

MySQL 主要有以下几种运算符:

算术运算符:加减乘除求余,主要是用在数值计算上。

比较运算符:大于、小于、等于、不等于,主要用于数值的比较和字符串的匹配上。

逻辑运算符:与、或、非、异或等,结果只返回真值(1或者true)和假值(0或false)。

MySQL 注释符号有三种,分别如下所示。

  1. #...
  2. 2. "-- "(注意:"--" 后面有一个空格)

3. /*...*/

1、“#”,表示单行注释,语法“#注释内容”

  1. “--”,表示单行注释,语法“-- 注释内容”

3、“/**/”,表示多行注释,语法“/*注释内容*/”

联合查询 : UNION

并操作 union、交操作 intersect、差操作 except

UNION用于合并具有相同字段结构的两个表的内容,主要用在一个结果中集中显示不同表的内容

select * from venus1

union

select * from venus2

union查询默认不返回重复记录

union查询的表的字段必须一样

union查询的数据类型必须能兼

#union查询结果只增加了行数而列数不变

union操作符用于合并两个或多个select语句的结果集。

union所查询的列数、列的顺序必须相同,数据类型必须兼容。

如果现在要查询tbox数据库的前五列信息,则可以输入select * from tbox order by 5;

如果现在要查询tbox数据库的前六列信息,因为已经超出数据库tbox表列数的最大值,则查询不到

如果在现实情况下有更多的数据库表,此时我们还可以使用嵌套查询

嵌套查询包括:

1.子查询

2.子查询可以继续嵌套

3.子查询中不可以使用order by子句,只对最后结果排序

4.子查询要用括号括起来

子查询结果为集合时可用如下关键字判断

[NOT]IN [不]包含其中

ANY//ALL 任何一个//所有的

[NOT]EXISTS [不]存在

接下来给大家介绍一些mysql的系统函数

系统用户名:system_user()

查询语句:

select system_user();

select user from mysql.user;

用户名:user()

查询语句:

select user();

当前用户名:current_user()

查询语句:current_date()当前日期

select current_user();

连接数据库用户名:session_user()

查询语句:

select session_user();

数据库名:database()

查询语句:

select database();

数据库版本:version()

查询语句:

select version();

数据库读取路径:@@basedir

查询语句:

show variables like '%basedir%';

MYSQL安装路径:@@char

查询语句:

show variables like"%char%";

查看当前系统版本:@@version_compile_os

查询语句:

select @@version_compile_os;

其它相关函数:

left(s,n) #返回字符串s最左边的字符 n是个数

right(s,n) #返回字符串s最右边的字符

substr(s,n,len) mid(s,n,len)

#截取字符串s的第n个字符,且截取长度为len

lpad(string,length,’str2’) rpad(string,length,’str’)

#string:需要填充的字符串 length:填充之后的总长度 str:填充字符串,默认空格

其它相关函数:

LOCATE(‘str’,’str1’) LOCATE(str,str1,pos) locate(‘a’,’locala’,5)

#返回str在str1中第一次出现的位置 pos--从pos位置开始检索

insert(str1,pos,len,str2)

#str1:指定字符串 pos:开始被替换的位置 len:被替换字符串长度 str2:新字符串

instr(field, str)

#返回field字符串中出现str字符串的位置

position(str1 in str2)

#返回字符串中第一次出现的子字符串的位置,若没有返回0

判断当前用户的第一字符:

查询语句:

select left(user(),1)=’r’;

判断当前用户的最后一个字符:

查询语句:

select right(user(),1)=’r’;

截取函数:

截取当前数据第二个字符是否为r

查询语句:

select substr(database(),2,1)=’r’;

select mid(database(),2,1)=’r’;

#正确返回1,错误返回0

其它相关函数:

concat(str1, str2,...) select concat(“abc”,NULL,”fg”) NULL

#返回结果为连接参数产生的字符串

concat_ws(separator, str1, str2, ...) select concat_ws(“+”,”123”,”345”) 123+345

#用第一个参数作为连接符号将字符串连接

group_concat(str1)

#将group by产生的同一个分组中的值连接起来,返回一个字符串

if(expr,v1,v2) select if(1<2,1,0);

#expr:条件 满足条件返回V1,不满足条件返回V2

case when expr then v1 else v2 end

#满足expr,则返回V1,不满足则返回V2

sleep(N)

#执行select sleep(N)可以让此语句运行N秒

oct() #转换为8进制 ord() 返回第一个字符串的第一个字符的ascii值

hex() #转换为16进制

char() #转换为字符串

ascii() #ASCII值

数据库函数:

infomation_schema

information_schema 用于存储数据库元数据(关于数据的数据),例如数据库名、表名、列的数据类

型、访问权限等。

infomation_schema.schemata infomation_schema.tables infomation_schema.cloumns

编写人:Kevin
2023.7.22