MySQL数据库查询,select

15 篇文章 0 订阅
4 篇文章 0 订阅

概述

        数据的操作永远离不开增删改查四个字,也就是DML数据操作语言:涉及增删改,DQL语言:数据查询语言 关键字select

DQL语言:数据查询语言

D:Data Q:Quevy L:Language 关键字:select

数据库三范式:

第一范式:1NF是对属性的原子性约束,要求字段具有原子性,不可再分解;(只要是关系型数据库都满足1NF)

第二范式:2NF是在满足第一范式的前提下,非主键字段不能出现部分依赖主键;解决:消除复合主键就可避免出现部分以来,可增加单列关键字。

第三范式:3NF是在满足第二范式的前提下,非主键字段不能出现传递依赖,比如某个字段a依赖于主键,而一些字段依赖字段a,这就是传递依赖。解决:将一个实体信息的数据放在一个表内实现。

查询:select

select 字段名1,字段名2,字段名3... from 表名     也可以用表名.字段名 用于区分不同的表拥有相同的表名

取别名:

关键字 AS 

select * from 表名 as 表别名; --as可以省略,但最好加上

select 表别名.列名,列名, .... from 表名 as 表别名

示例:selesc r.stuId,SubjectNo from result as r;

修改列名名称:

select 表别名.列名 as 列别名,列名 as 列别名 from 表名 as 表别名;

示例:-- select r.stuId as '学生编号',score 成绩 from result as r;

去重:distinct

格式:select distinct 字段名 from 表名;

示例:select distinct stuId from result; ------相同的学号只取一次

注!:distinct 只能在开头,不能再中间

select score,distinct stuId from result;  ------语句不成立

排序:order by

示例:select distinct stuId from result order by stuId;------会把学生编号升序排列

----降序排列:select distinct stuId from result order by stuId desc;

:降序排列关键字 desc  但只会让紧跟着desc 的列名的值降序

---嵌套语句进行增加行键

select 表别名.*,@a:=@a+1 from 表名 表别名(select @a:=0) s; --s(select @a:=0)这个临时表的表别名,作用:给数据结果加编号

模糊查询:关键字 like(像)

(1)当想查询学生姓名中包含字符a,就需要使用到模糊查询,模糊查询的话使用关键字是like(像)需要使用通配符  '_'   '%'  '[ ]'   '[^]'
(2)
%:表示任意 0 个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。

_:表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句。

[ ]:表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。

[^] :表示不在括号所列之内的单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符。

通配符:_
查询名字由五个字母构成的 学生记录
Select *from stu where sname like ‘_____’;

查询名字由五个字母构成的,并且第五个字符是i 学生记录
Select *from stu where sname like ‘___i’;

通配符: %
查询名字以‘z’开头的学生记录
Select *from stu where sname like ‘z%’;

查询名字中第二个字符是i的学生记录
Select *from stu where sname like ‘_i’;

查询名字中包含a的学生记录
select *from stu where sname like ‘%a%’;

:当查询字符串内包含 '_' 或 '%' 时 需要使用转义符  \
 

in:

子查询:嵌套查询,在select查询内还有一层 select查询,把原本需要两步骤查询得出的数据合并成一条语句,节省空间,提高效率

子查询的分类: 1. 从子查询返回的结果的条目数:单行子查询 VS 多行子查询

2.子查询是否被执行多次: 相关子查询 VS 不相关子查询

select * from result where stuId not in

(select stuId from student);--筛选不在学生表范围内的学生成绩

联合查询:

联合查询分类
        内连接(inner Join 或 Join)
        外连接(outer Join)
                左外连接(left outer Join 或 left Join)
                右外连接(right outer Join 或 right Join)
                全外连接(full outer Join 或 full Join)
交叉连接 (cross Join)
结果集链接 (union 和 union all)

联合查询效率较高.以下例子来说明联合查询的好处

t1表结构(用户名,密码)    userid int         username   varchar(20)     password       varchar(20)

                                                  1                    jack                           jackpwd

                                                   2                    owen                        owenpwd

t3表结构(用户积分,等级)    userid int         jf   int                   dj           int

                                                1                     20                       3

                                                 3                     50                       6

第一:内联(inner join)

如果想把用户信息,积分,等级都列出来.那么一般会这样写

select * from t1 ,t3 where t1.userid = t3.userid   其实这样的结果等同于select * from t1 inner join t3 on t1.userid=t3.userid

就是把两个表中都存在userid的行拼成一行.这是内联.但后者的效率会比前者高很多.建议用后者的写法.

运行结果:userid    username password     userid   jf    dj

                   1             jack        jacjpwd      1          20   3

第二:左联(left outer join)显示左表中的所有行

select * from t1 left outer join t3 on t1.userid=t3.userid

运行结果:userid    username password     userid   jf     dj

      1        jack          jackpwd       1         20   3

                          2       owen         owenpwd     NULL NULL   NULL

第三:右联(right outer join)显示右表中的所有行

select * from t1 right outer join t3 on t1.userid=t3.userid

运行结果:userid    username password     userid   jf     dj

      1        jack          jackpwd       1         20   3

                         Null    Null           Null              3        50     6

第四:全联(full outer join)显示两边表中所有行

select * from t1 full outer join t3 on t1.userid=t3.userid

运行结果:userid    username password     userid   jf     dj

      1        jack          jackpwd       1         20   3

                          2       owen         owenpwd     NULL NULL   NULL

                         Null    Null           Null              3        50     6

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL数据库SELECT是用于从一个或多个表检索数据的关键字。SELECT查询表达式的基本语法如下: ```sql SELECT column1, column2, ... FROM table_name WHERE condition; ``` 其,column1、column2等为要检索的列名,可以使用通配符*代替所有列。table_name为要检索的表名,condition为可选的筛选条件。 在SELECT查询表达式,可以使用多种表达式来生成结果集。以下是一些常用的SELECT表达式: 1. 聚合函数:用于对结果集进行统计计算,例如SUM、COUNT、AVG、MAX、MIN等。 ```sql SELECT SUM(column_name) FROM table_name; ``` 2. 别名:用于为查询结果的列或表指定别名,以便更好的阅读和理解查询结果。 ```sql SELECT column_name AS alias_name FROM table_name; ``` 3. 子查询:嵌套在SELECT语句查询语句,用于从子查询获取数据,然后在主查询使用它。 ```sql SELECT column_name FROM table_name WHERE column_name IN (SELECT column_name FROM table_name WHERE condition); ``` 4. 连接:用于将两个或多个表的数据合并到一个结果集,包括INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN等。 ```sql SELECT column_name FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name; ``` 5. 字符串函数:用于处理字符串数据,例如CONCAT、LENGTH、SUBSTRING、UPPER、LOWER等。 ```sql SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM table_name; ``` 6. 条件表达式:用于根据条件过滤结果集,例如IF、CASE等。 ```sql SELECT column_name, IF(column_name > 10, '大于10', '小于等于10') AS result FROM table_name; ``` 以上是MySQL数据库常用的SELECT查询表达式,可以根据实际需求选择使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值