<span>数据库基础语句</span>

1、创建数据库

-- 1、创建数据库
CREATE DATABASE school CHARACTER SET utf8;

2、创建表

-- 2、创建表
CREATE TABLE stu(
	stuid INT PRIMARY KEY AUTO_INCREMENT,
    stuname VARCHAR(20) NOT NULL,
    stusex VARCHAR(5) DEFAULT '男' CHECK(stusex='男' OR stusex='女'),
    stuage INT DEFAULT 0
) DEFAULT CHARSET=utf8;

CREATE TABLE course(
    cid INT PRIMARY KEY AUTO_INCREMENT,
    -- unique: 值唯一
    cname VARCHAR(20) NOT NULL UNIQUE
) DEFAULT CHARSET=utf8;

CREATE TABLE stu_score(
    id INT PRIMARY KEY AUTO_INCREMENT,
    stuid INT,
    cid INT,
    score DOUBLE,
    -- 设置外键(一般不建议设置)
    -- FOREIGN KEY(stuid) REFERENCES stu(stuid),
    -- FOREIGN KEY(cid) REFERENCES course(cid)
) DEFAULT CHARSET=utf8;

3、插入

-- 3、插入数据
INSERT INTO stu(stuname) VALUES('规划明');
INSERT INTO course VALUES(NULL,'高等数学');
INSERT INTO stu_score VALUES(NULL,1,2,66.6);

4、查询

4.1、过滤查询

-- 4、过滤查询
SELECT * FROM stu;
SELECT * FROM stu WHERE stuname LIKE '%明';
SELECT * FROM stu WHERE stuname LIKE '小_';

4.2 、起别名

-- 对查询结果起别名,修改列名显示
SELECT stuname AS '姓名' ,stuage AS '年龄' FROM stu;

4.3、分页查询(limit)

-- 显示4条查询数据
-- 0:开始位置;4:显示4个
SELECT * FROM stu LIMIT 0,4;

4.4、子查询

-- 查询成绩为100分的学生的姓名
SELECT stuid FROM stu_score WHERE score=100;
SELECT stuname FROM stu WHERE stuid = 2;

SELECT stuname FROM stu WHERE stuid =(
     SELECT stuid FROM stu_score WHERE score=100
)

4.5 、连接查询

4.5.1内连接?

-- 查询分数信息,显示学生姓名,课程名,分数。
-- 第一种方法
-- 1.查什么写什么
SELECT stuname,cname,score FROM stu,course,stu_score
-- 2.建立关系
WHERE stu.stuid=stu_score.stuid 
AND course.cid=stu_score.cid

-- 第二种方法
SELECT stuname,cname,score FROM stu 
INNER JOIN stu_score ON stu.stuid=stu_score.stuid
INNER JOIN course ON stu_score.cid=course.cid

4.5.2左外连接和右外连接?

左外连接:显示左表的全部信息,右表没有的部分用null表示。右外连接类似。

-- 查询学生分数,显示学生姓名和分数
SELECT stuname,score FROM stu 
LEFT JOIN stu_score ON stu.stuid=stu_score.stuid 

4.6 、case语句

SQL中CASE语句相当于if---else 语句

-- 显示学生性别信息
SELECT stuid,stuname,stusex,stuage FROM stu;

-- CASE有两种格式
-- 简单case函数
SELECT stuid,stuname,
CASE stusex
WHEN '1' THEN '男'
WHEN '0' THEN '女'
ELSE '保密'
END,stuage FROM stu

-- case搜索函数
SELECT stuid,stuname,
CASE WHEN stusex='1' THEN '男'
WHEN stusex='0' THEN '女'
ELSE '保密'
END,stuage FROM stu

select 与 case结合使用好处:

  • 一是在显示查询结果时可以灵活的组织格式
  • 二是有效避免了多次对同一个表或几个表的访问

5、删除

DELETE FROM stu WHERE stuname='哈哈';

6、修改

UPDATE stu SET stusex='女' WHERE stuname='哈哈';

7、去重复(distinct)

-- 7、去重复,作用于单列或多列。返回唯一不同的值。distinct必须放在开头。
-- 去掉相同的stuname,然后显示信息
SELECT DISTINCT stuname FROM stu;

8、统计(count)

-- 8、 统计: count
-- 学生表中stuname去重后的数目
SELECT COUNT(DISTINCT stuname) FROM stu;
-- 统计学生表中一共有多少个学生
SELECT COUNT(stuid) FROM stu;
SELECT COUNT(1) FROM stu;
SELECT COUNT(*) FROM stu;

8.1、COUNT(*)和COUNT(1)的区别

  这两种方式都可以用来统计表中总数据量,但是他们的实现方式略有不同。

  • COUNT(*)是统计表中的(该行数据同时都不为null)的数据总量,

    也就是说如果有一行所有数据都为null,那么就不会被统计

  • COUNT(1)是通过在该表的表结构中添加一列,该列的数据都为1,

    最终是通过统计该列中有多少个数据为1的数量,即为数据总数。

9、排序

升序: asc 降序: desc

-- 9 、排序  默认升序
SELECT * FROM stu ORDER BY stuage;
-- 升序: asc   降序: desc
SELECT * FROM stu ORDER BY stuage ASC;
SELECT * FROM stu ORDER BY stuage DESC;
-- 根据查询结果的第二列进行降序排序
SELECT stuname,stuage FROM stu ORDER BY 2 DESC;

10、常用的聚合函数

count sum avg max min
计数 求和 平均值 最大值 最小值
-- count 计数;sum 求和;avg 平均值;max 最大值;min 最小值
SELECT SUM(score) FROM stu_score;
SELECT AVG(score) FROM stu_score;

11、null 的特殊性

1、在sql中,任何数据和null做运算,运行的结果还是null

4+NULL
NULL/0

2、null不是0
3、可以通过特定的函数,将null设置为特定的值。注意有null值时,结果为null
4、将字段中null值替换为指定值的方法

-- 方法1:使用isnull替换
select keyId,isnull(info,'替换null值') as info from test 
-- 方法2:使用case when 替换
select keyId,case when info is null then '替换null值' else info end as info from test 
-- 方法3:使用coalesce替换相应的值
select keyId , coalesce(info,'替换null值') as info from test 
全部评论

相关推荐

原来已经一年了,因为没有加任何实验室没有学长学姐带,再一次偶然的机会下刷到我们学校的牛肉哥,和他聊天之后发现他也没加实验室能进大厂,我就燃起了希望,去年大概&nbsp;4&nbsp;月份找好路线&nbsp;零基础&nbsp;开始学&nbsp;5&nbsp;月背八股和开始刷算法很难受&nbsp;7-8&nbsp;月焦虑躯体化害怕找不到实习&nbsp;9&nbsp;月找到一家像样的小厂去实习了&nbsp;4&nbsp;个月大三上期末考试结束之后&nbsp;1&nbsp;月份回来边实习边准备工作压力很大&nbsp;当时只有字节、百度、商汤的面试,字节三面挂了,百度&nbsp;oc,商汤&nbsp;二面挂(差评&nbsp;无效面试),之后来深圳百度实习之后还是觉得不甘心一直没把算法和八股扔下一直在准备,百度实习的时候&nbsp;mt&nbsp;交给我一个特别重要的工作数据库迁移(特别感谢&nbsp;mt&nbsp;,这个需求学到了很多东西处理了一堆线上问题),本来看着暑期他们面试都很困难,然后听说百度要涨实习薪资(然而&nbsp;5&nbsp;月并没有涨),就想着留在百度吧也懒得面试了,4&nbsp;月&nbsp;20&nbsp;多的时候字节&nbsp;hr&nbsp;打电话约面问我要不要尝试一下询问了&nbsp;1&nbsp;月份三面为啥会挂有没有学习&nbsp;ai&nbsp;知识(因为字节这边后端岗位偏&nbsp;ai),我来到百度之后全面拥抱&nbsp;AI&nbsp;也认识了我的好兄弟&nbsp;X&nbsp;哥,他在百度&nbsp;XX&nbsp;部门&nbsp;Agent&nbsp;实习,他属于是我&nbsp;Agent&nbsp;的启蒙老师,来百度之后一直在了解&nbsp;AI&nbsp;这一块,我就接受了字节的面试,一面的时候&nbsp;20&nbsp;分钟实习拷打然后突然说&nbsp;30&nbsp;分钟代码考核我心就凉了以为是&nbsp;kpi,算法题是手撕高并发安全下的令牌桶限流器,我写了整整&nbsp;80&nbsp;多行代码最后也写出来了,但是从来没看到过出这种题能&nbsp;oc&nbsp;的我也就不管了,后边面试也是很顺利但是流程有点长可能一直在横向吧总结结果是好的!!!感谢这一年努力的自己和遇到的各位互联网大佬分享的知识!!!ps&nbsp;图二纯感慨&nbsp;(觉得🍬请不要喷我)欢迎大家一起交流学习呀!!!!
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务