SQL备忘录

一、限制输出数量和跳过N条数据

  • IFNULL(a, b) 如果不是NULL输出a,是NULL则输出b;
  • offset X 是跳过X个数据;
  • limit Y 是选取Y个数据;
  • limit X,Y 中X表示跳过X个数据,读取Y个数据;
  • ORDER BY X DESC 按X降序排序(默认升序ASC)

例1. 第二高薪水

# Write your MySQL query statement below
SELECT 
IFNULL
(
    (SELECT DISTINCT Salary
    FROM Employee
    ORDER BY Salary DESC
    LIMIT 1 OFFSET 1)
    , NULL
)
AS 'SecondHighestSalary'

二、字符串匹配

一般形式为:

列名 [NOT ] LIKE

匹配串中可包含如下四种通配符:

  • _:匹配任意一个字符;
  • %:匹配0个或多个字符;
  • [ ]:匹配[ ]中的任意一个字符(若要比较的字符是连续的,则可以用连字符“-”表 达 );
  • [^ ]:不匹配[ ]中的任意一个字符。

例2. 查询学生表中姓‘张’的学生的详细信息。

SELECT * FROM 学生表 WHERE 姓名 LIKE ‘张%

例3. 查询姓“张”且名字是3个字的学生姓名。

SELECT * FROM 学生表 WHERE 姓名 LIKE '张__’

如果把姓名列的类型改为nchar(20),在SQL Server 2012中执行没有结果。原因是姓名列的类型是char(20),当姓名少于20个汉字时,系统在存储这些数据时自动在后边补空格,空格作为一个字符,也参加LIKE的比较。可以用rtrim()去掉右空格。

SELECT * FROM 学生表 WHERE rtrim(姓名) LIKE '张__'

例4. 查询学生表中姓‘张’、姓‘李’和姓‘刘’的学生的情况。

SELECT * FROM 学生表 WHERE 姓名 LIKE '[张李刘]%

例5. 查询学生表表中名字的第2个字为“小”或“大”的学生的姓名和学号。

SELECT 姓名,学号 FROM 学生表 WHERE 姓名 LIKE '_[小大]%'

例6.查询学生表中所有不姓“刘”的学生。

SELECT 姓名 FROM 学生 WHERE 姓名 NOT LIKE '刘%

例7.从学生表表中查询学号的最后一位不是2、3、5的学生信息。

SELECT * FROM 学生表 WHERE 学号 LIKE '%[^235]'

三、CASE 函数

CASE函数是一种多分支的函数,可以根据条件列表的值返回多个可能的结果表达式中的一个。
可用在任何允许使用表达式的地方,但不能单独作为一个语句执行。

分为:

  • 简单CASE函数
  • 搜索CASE函数

简单CASE函数

CASE 测试表达式
WHEN 简单表达式1 THEN 结果表达式1
WHEN 简单表达式2 THEN 结果表达式2WHEN 简单表达式n THEN 结果表达式n
[ ELSE 结果表达式n+1 ]
END

计算测试表达式,按从上到下的书写顺序将测试表达式的值与每个WHEN子句的简单表达式进行比较。
如果某个简单表达式的值与测试表达式的值相等,则返回第一个与之匹配的WHEN子句所对应的结果表达式的值。
如果所有简单表达式的值与测试表达式的值都不相等,
若指定了ELSE子句,则返回ELSE子句中指定的结果表达式的值;
若没有指定ELSE子句,则返回NULL。

例8. 查询班级表中的学生的班号、班名、系号和班主任号,并对系号作如下处理:
当系号为1时,显示 “计算机系”;
当系号为2时,显示 “软件工程系”;
当系号为3时,显示 “物联网系”。

SELECT 班号 ,班名,
CASE 系号
WHEN 1 THEN '软件工程系'
WHEN 2 THEN '计算机系'
WHEN 3 THEN '物联网系'
END AS 系号,班主任号
FROM 班级表

搜索CASE函数

CASE
WHEN 布尔表达式1 THEN 结果表达式1
WHEN 布尔表达式2 THEN 结果表达式2WHEN 布尔表达式n THEN 结果表达式n
[ ELSE 结果表达式n+1 ]
END

按从上到下的书写顺序计算每个WHEN子句的布尔表达式。
返回第一个取值为TRUE的布尔表达式所对应的结果表达式的值。
如果没有取值为TRUE的布尔表达式,
则当指定了ELSE子句时,返回ELSE子句中指定的结果;
如果没有指定ELSE子句,则返回NULL。

例8如果用搜索CASE来做的话:

SELECT 班号 ,班名,
CASE
WHEN 系号=1 THEN '软件工程系'
WHEN 系号=2 THEN '计算机系'
WHEN 系号=3 THEN '物联网系'
END AS 系号,班主任号
FROM 班级表

例9. 查询“M01F011”号课程的考试情况,列出学号、课程号和成绩,同时将百分制成绩显示为等级。

SELECT 学号,课程号,
CASE
WHEN 成绩 >= 90 THEN '优'
WHEN 成绩 BETWEEN 80 AND 89 THEN '良'
WHEN 成绩 BETWEEN 70 AND 79 THEN '中'
WHEN 成绩 BETWEEN 60 AND 69 THEN '及格'
WHEN 成绩 <60 THEN '不及格'
END 成绩
FROM 成绩表
WHERE 课程号 = 'M01F011'

例题
例10. 统计每个班男生和女生的数量各是多少,统计结果的表头为,班号,男生数量,女生数量。

SELECT 班号,
COUNT(CASE WHEN 性别=‘男’ THEN ‘男’ END) 男生数,
COUNT(CASE WHEN 性别=‘女’ THEN ‘女’ END) 女生数
FROM 学生表 GROUP BY 班号

例11. 判断成绩的等级,85-100为“优”,70-84为“良”,60-69为“及格”,60以下为“不及格”,并统计每一等级的人数。

SELECT
CASE
WHEN GRADE BETWEEN 85 AND 100 THEN '优'
WHEN GRADE BETWEEN 70 AND 84 THEN '良'
WHEN GRADE BETWEEN 60 AND 69 THEN '及格'
ELSE '不及格'
END 等级, COUNT(*) 人数
FROM SC
GROUP BY
CASE
WHEN GRADE BETWEEN 85 AND 100 THEN '优'
WHEN GRADE BETWEEN 70 AND 84 THEN '良'
WHEN GRADE BETWEEN 60 AND 69 THEN '及格'
ELSE '不及格'
END

四、LEAD()和LAG()

SQL中lag()和lead()函数使用

五、DATE_ADD()函数

MySQL DATE_ADD() 函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简的PHP备忘录源码示例,它使用MySQL数据库来存储备忘录记录: ```php <?php //连接数据库 $servername = "localhost"; $username = "yourusername"; $password = "yourpassword"; $dbname = "yourdbname"; $conn = new mysqli($servername, $username, $password, $dbname); //检查连接 if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } //如果提交了表,将数据插入到数据库中 if ($_SERVER["REQUEST_METHOD"] == "POST") { $title = $_POST["title"]; $content = $_POST["content"]; $sql = "INSERT INTO memo (title, content) VALUES ('$title', '$content')"; if ($conn->query($sql) === TRUE) { echo "备忘录记录创建成功"; } else { echo "创建失败: " . $conn->error; } } //从数据库中获取备忘录记录 $sql = "SELECT * FROM memo"; $result = $conn->query($sql); //关闭连接 $conn->close(); ?> <!DOCTYPE html> <html> <head> <title>PHP备忘录</title> </head> <body> <h1>PHP备忘录</h1> <!-- 显示备忘录记录 --> <?php if ($result->num_rows > 0): ?> <ul> <?php while($row = $result->fetch_assoc()): ?> <li> <h2><?php echo $row["title"]; ?></h2> <p><?php echo $row["content"]; ?></p> <p><?php echo $row["created_at"]; ?></p> </li> <?php endwhile; ?> </ul> <?php else: ?> <p>暂无备忘录记录</p> <?php endif; ?> <!-- 创建备忘录记录表 --> <h2>创建备忘录记录</h2> <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> <label for="title">标题:</label> <input type="text" id="title" name="title"><br><br> <label for="content">内容:</label> <textarea id="content" name="content"></textarea><br><br> <input type="submit" value="提交"> </form> </body> </html> ``` 这段代码包括了两部分:第一部分连接到MySQL数据库,并将提交的备忘录记录插入到 `memo` 表中;第二部分显示已有的备忘录记录,并提供一个表来创建新的备忘录记录。你需要将 `yourusername`、`yourpassword` 和 `yourdbname` 分别替换为你自己的MySQL用户名、密码和数据库名。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值