软测学习知识小记——数据库1

小记

今日主要学习了DQL(Data Query Language,数据查询语言)的相关知识。DQL是SQL语言的核心部分,主要用于从数据库中查询所需的数据。在软测中经常用到,为数据库部分的核心知识。

一、查询的基本语法

用法:select 查询内容 from 表名 [where 限定条件] [group by 分组条件] [having 分组后再次限定] [order by 排序条件 排序方式] [limit 偏移量,返回数量];

查询的基础语法为:select 字段1,字段2,字段3,...,字段n from 表名;

在进行查询时,需要注意以下:

1.表名必须存在
2.字段必须在表中存在,或者必须是一个常量或函数
3.可使用“*”来替代需返回的字段,它是一个通配符,表示返回所有字段
4.在进行查询操作时,必须弄清楚表结构
5.任何的查询操作不会改变源表中的任何数据

二、where限定条件

用法:select 查询内容 from 表名 where 限定条件;
表示:如果满足给定的限定条件,则返回相应的数据

符号含义
=等于
>大于
>=大于等于
<小于
<=小于等于
!=不等于

注意:在实际查询的过程中,不管where后面的判断条件有多复杂,它最终返回的是1或0,是1返回该数据,是0则过滤掉该条数据

三、特殊的比较运算符

  1. 在两个数值之间 between …… and ……
    用法:select 查询内容 from 表名 where 字段 between 值1 and 值2 ;
    需要注意的是:
    在使用between and 的时候,值1要小于等于值2,否则这样会导致查询结果为空。

  2. 在给定的集合之中 in(set)
    用法:select 查询内容 from 表名 where 字段 in(值1,值2,值3,...,值n);
    需要注意的是:select * from 表名 where 10000 <= sal <=20000; 这个写法是错误的,无论10000<=sal 返回的结果是0或1,都是小于20000的。

  3. 模糊查询 like
    用法:select 查询内容 from 表名 where 字段 like '%关键字%';
    表示:如果字段中包含了给定的关键字,则返回该条数据

    在使用模糊查询的时候需注意:
    (1)百分号%是一个通配符,匹配任意长度的内容
    (2)下划线_也是一个通配符,匹配一个长度的内容
    (3)'%关键字%'称为完全模糊查询,表示只要包含该关键字即可
    (4)‘关键字%‘或者’’%关键字称为半模糊查询,分别表示查询以关键字开头和结尾的数据
    (5)对于百分号%和下划线_,只有当他们跟在like后面时才是通配符,否则是一个普通字符
    (6)在实际工作中,除非是产品需求规格说明书中明确要求我们觉得合理,否则输入框查询的功能默认是完全模糊查询

  4. 空值判断 is null
    用法:select 查询内容 from 表名 where 字段 is null;
    表示:如果字段的值为空(null),则返回该条数据

    null 和’ ‘的区别:
    (1)null表示该字段没有值
    (2)’ '为空字符串,表示该字段有值,值的长度为0

四、逻辑运算符

  1. 逻辑与 and &&
    用法:select 查询内容 from 表名 where 表达式1 and 表达式2 and ... and 表达式n;
    表示:如果给定的表达式1,表达式2,…都成立,则返回符合的数据,若有一个表达式不成立,则过滤该数据

  2. 逻辑或 or ||
    用法:select 查询内容 from 表名 where 表达式1 or 表达式2 or ... or 表达式n;
    表示:如果给定的表达式1,表达式2,…有一条成立,则返回符合的数据,若表达式都不成立,则过滤该数据
    注意:在使用逻辑或的时候需要注意:如果一个where限定语句中同时存在逻辑与和逻辑或运算时,会先进行逻辑与的运算,再进行逻辑或的运算

  3. 逻辑非 not !
    用法:select 查询内容 from 表名 where not 表达式;
    表示:如果表达式不成立,则返回该条数据,如果表达式成立,则过滤该条数据
    注意:如果要使用!进行逻辑非判断的话,需要将表达式使用括号括起来

五、去重 DISTINCT

使用 DISTINCT 关键字确实可以在查询结果中去掉重复的记录。DISTINCT 关键字是 SQL 中用于返回唯一不同值的命令。
用法:select DISTINCT column1, column2, ...FROM table_name;
注意事项:
(1)DISTINCT 关键字作用于所有列,而不是单独的某一列。
(2)如果你对多个列使用 DISTINCT,那么数据库会基于这些列的组合值来判断重复性。
(3)使用 DISTINCT 时,不能使用 * 来选择所有列,必须明确指定列名。

六、设置别名 as

使用as关键字可以给查询返回的字段以及查询的表设置一个临时的别名
用法:select 字段1 as 别名,字段2 as 别名 from emp;
在设置别名的时候需注意:
(1)as可以缺失,但建议写上
(2)给表和字段起的别名只在本次查询中生效
(3)给字段起的别名不能直接跟在where后做判断使用
(4)如果给表设置了别名,那么本次查询中,只能使用别名

七、排序 order by

可以将select查询到的结果按照指定字段进行排序
用法:select 查询内容 from 表名 where 限定条件order by 排序1,排序2,...,排序方式
两种排序方式:升序 asc(排序方式默认为升序) 降序 desc

在使用order by 进行排序的是时候需要注意:
(1)排序方式默认为升序,可以缺失,但是建议写上
(2)当同时存在多个排序条件时,按照从左到右的顺序,会优先按照第一个条件进行排序,在满足第一个判断条件的基础上,再按照第二个排序条件进行排序,依次类推
(3)给字段起的别名可以直接跟在order by后面进行使用
(4)养成好习惯,将排序条件放置在select后,结果体现出该字段,提高可读性
(5)在实际工作中,如果要对中文的内容按照汉语拼音内容进行排序,需确保字段的字符集是gbk,如果不是,需要使用类型转换函数将其转换成gbk
语法:convert(字段 using gbk)
(6)在实际工作方式中,除非是产品需求规格说明中明确要求并且我们觉得合理,否则所有的信息展示功能,数据的默认排序方式必须是按照创建时间倒序

例子:查询会员信息,并按照会员名字汉语拼音进行升序展示 (面试点,印象深刻的bug)
select * from user_name order by uname asc;
通常用汉语进行排序时,若数据库以utf8字符集时,排序会混乱,所以得转给gbk
select * from user_name order by convert(uname using gbk) asc;

九、分组 GROUP BY

使用 GROUP BY 子句可以对查询结果按照指定的一个或多个字段进行分组统计,它是 SQL 中进行数据分组和聚合操作的强大工具。目前还未学到聚合函数,相关知识后续再补充。
用法:select 查询内容 from 表名 where 限定条件 group by 分组条件1,分组条件2,...,order by 字段;

在分组的时候注意;
(1)如果只是单纯的分组,其实就是一个去重的作用(和distinct的作用一样)
(2)如果存在分组的话,select后面只能跟分组的条件字段以及聚合函数使用
(3)给字段设置的别名可以直接跟在group by 后面使用
(4)一般情况下,group by都是配合聚合函数来一起使用的
(5)一般情况下,只要题目(需求)中要求返回"各什么什么"的时候,只要这个“什么什么”不是这个表中的最小粒度,那么就会按照这个“什么什么”近些年进行分组

例子:查询会员信息,并按照会员性别进行分组
select gender from litemall_user group by gender;

mysql另一个版本运行:select *from emp group by deptno;
这个用法即使能够运行,也没有实际意义,只是返回了个分组下的第一条数据,如果sql_mode里有only_full_group_by限制的话,该sql是无法运行的,可以在my.ini查看only_full_group_by

总结

以上就是今天所作的笔记,本文仅仅简单DQL基础简单的用法,后续将继续学习相关知识。
在这里插入图片描述

  • 27
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
接入第三方登录是让用户方便快捷地使用已有账号登录你的网站或应用程序,提高用户体验的一种方式。本文将介绍如何使用 PHP 实现微信公众号第三方登录。 1. 获取微信授权 首先,需要获取微信用户的授权。具体步骤如下: 1)引导用户打开微信授权页面: ```php $appid = 'your_appid'; $redirect_uri = urlencode('http://yourdomain.com/callback.php'); $scope = 'snsapi_userinfo'; $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=$scope&state=STATE#wechat_redirect"; header("Location: $url"); ``` 其中,`$appid` 是你的微信公众号的 AppID,`$redirect_uri` 是授权后回调的 URL,`$scope` 是授权作用域,可以是 `snsapi_base` 或 `snsapi_userinfo`,`$state` 是自定义参数,用于防止 CSRF 攻击。 2)获取授权码: 用户同意授权后,会重定向到 `$redirect_uri` 指定的 URL,带上授权码 `code` 和 `state` 参数。 ```php $code = $_GET['code']; $state = $_GET['state']; ``` 3)获取 access_token 和 openid: 使用授权码 `code` 获取 `access_token` 和 `openid`。 ```php $access_token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$secret&code=$code&grant_type=authorization_code"; $response = file_get_contents($access_token_url); $result = json_decode($response, true); $access_token = $result['access_token']; $openid = $result['openid']; ``` 其中,`$secret` 是你的微信公众号的 AppSecret。 2. 获取用户信息 获取到 `access_token` 和 `openid` 后,可以使用以下代码获取用户信息: ```php $userinfo_url = "https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openid&lang=zh_CN"; $response = file_get_contents($userinfo_url); $userinfo = json_decode($response, true); ``` 其中,`$userinfo` 包含用户的昵称、头像等信息。 3. 将用户信息保存到数据库 最后,将获取到的用户信息保存到数据库中,以便下次使用时快速登录。 ```php // 连接数据库 $con = mysqli_connect('localhost', 'username', 'password', 'database'); mysqli_set_charset($con, "utf8"); // 查询用户是否已存在 $sql = "SELECT * FROM users WHERE openid='$openid'"; $result = mysqli_query($con, $sql); if (mysqli_num_rows($result) == 0) { // 用户不存在,插入新用户信息 $nickname = mysqli_real_escape_string($con, $userinfo['nickname']); $headimgurl = mysqli_real_escape_string($con, $userinfo['headimgurl']); $sql = "INSERT INTO users (openid, nickname, headimgurl) VALUES ('$openid', '$nickname', '$headimgurl')"; mysqli_query($con, $sql); } // 保存用户登录状态 $_SESSION['openid'] = $openid; ``` 以上就是使用 PHP 实现微信公众号第三方登录的步骤。需要注意的是,为了确保安全性,应该对用户输入的数据进行过滤和验证,防止 SQL 注入和 XSS 攻击等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值