数据库的表使用(二)

    科技2022-07-11  120

    多表使用

    关键字函数使用计数 求和 平均 最大值 最小值四舍五入上下限随机数分组排序 日期时间模糊查询(开头,结尾,包含)多表查询内连接左外连接右外连接

    关键字

    auto_increment: 自增 primary key : 主键 not null 非空

    auto_increment自增primary key主键not null非空unique唯一default默认值comment注释 USE barcelona; CREATE TABLE games ( num INT(2) AUTO_INCREMENT PRIMARY KEY`members` COMMENT "序号", NAME VARCHAR(20) NOT NULL COMMENT "球员", age INT(2) NOT NULL COMMENT "年龄", goal INT(2) DEFAULT 0 COMMENT "进球数", assist INT(2) DEFAULT 0 COMMENT "助攻数" );

    函数使用

    计数 求和 平均 最大值 最小值

    语法:

    select 函数(某字段) as 别名 from 表名;

    例子:

    # -- max/min/avg/count/sum(字段名) SELECT MAX(age) AS 年龄最大, MIN(age) AS 年龄最小 FROM games; SELECT SUM(goal) AS 总进球数, COUNT(*) AS 计数, AVG(goal) AS 平均数 FROM games g;

    最大值和最小值 计数,求和,求平均

    四舍五入上下限

    SELECT CEIL(3.6) AS 上限, FLOOR(3.6) AS 下限; SELECT ROUND(3.346) AS 四舍五入取整, ROUND(3.346,1) AS 保留一位,ROUND(3.346,2) AS 保留两位;

    例子:

    随机数

    SELECT RAND() AS 随机数,RAND()*100 AS 0100随机数;

    例子:

    分组

    group by 数据

    SELECT Pos AS 位置 ,COUNT(Pos) AS 人数 FROM members GROUP BY Pos; 位置 人数 DF 1 FW 3 MF 1

    人数小于2的列

    -- group by + having-- -- having 条件表达式:用来过滤分组结果 -- having作用和where类似,但having只能用于group by 而where是用来过滤表数据 SELECT Pos AS 位置 ,COUNT(Pos) AS 人数 FROM members GROUP BY Pos HAVING COUNT(*)<2; 位置 人数 DF 1 MF 1
    -- group by + with rollup:在最后新增一行中, -- 记录当前表中的该字段对应的操作结果(一般为函数) SELECT country,COUNT(*) FROM members GROUP BY country WITH ROLLUP;

    输出

    country count(*) Argentina 1 France 1 Netherlands 1 Spain 2 NULL 5

    排序

    # ------------排序---------- -- 排序时字段类型可以是数值类型float int 也可以是varchar -- 如果varchar类型对应的字段存放的是中文,则不能够排序; -- 但是如果字段值都是英文,可以排序 -- 按进球数升序排序 SELECT * FROM games ORDER BY goal ASC; -- 按进球数降序排序 SELECT * FROM games ORDER BY goal DESC; -- 按名字排序 SELECT * FROM games ORDER BY NAME ASC;

    按进球数升序排序 按进球数降序排序 按名字升序排序

    日期时间

    SELECT NOW()AS 当前时间,CURDATE() AS 当前时分秒, CURTIME() AS 当前日期;

    模糊查询(开头,结尾,包含)

    语法:

    select 显示字段 from 表名 where 某字段 like 字符; 查询所有以C开头的书籍 SELECT * FROM book WHERE B_NAME LIKE "C%"; 查询所有以b结尾的书籍 SELECT * FROM book WHERE B_NAME LIKE "%b"; 查询所有包含“入门”的书籍 SELECT * FROM book WHERE B_NAME LIKE "%入门%";

    多表查询

    语法:

    select 字段1 (别名) 字段2 (别名) from1 (别名),2 (别名) where 条件;

    例子:

    SELECT g.`num` "号码",g.`name` "名字",m.`Pos` "位置", m.`country` "国籍" FROM games g, members m WHERE g.`name`=m.`name`;

    结果:

    内连接

    语法:

    在这里插入代码片

    左外连接

    语法:

    -- 左外连接(当条件不满足时,以左边的表为主)(left join 左边表为主) compare following sample difference -- sample 1 book 为主 -- 如果publisher中没有book的书,就使用null SELECT * FROM book b LEFT JOIN publisher p ON b.`P_ID`=p.`P_ID`; -- sample 2 publisher 为主 SELECT * FROM publisher p LEFT JOIN book b ON b.`P_ID`=p.`P_ID`;

    右外连接

    语法:

    SELECT * FROM book b RIGHT JOIN publisher p ON b.`P_ID`=p.`P_ID`; -- sample 2 book 为主 SELECT * FROM publisher p RIGHT JOIN book b ON b.`P_ID`=p.`P_ID`;
    Processed: 0.009, SQL: 8