sql语句(mysql)

创建数据库

DROP DATABASE if EXISTS doctor_patient;
CREATE DATABASE doctor_patient CHARACTER SET utf8;

如何数据库中存有中文,记得加CHARACTER SET utf8

创建视图

DROP VIEW IF EXISTS medical;
CREATE VIEW medical AS
SELECT doctor.no, doctor.name as doctor_name, patient.name as patient_name, description
from doctor, patient, medical_history
WHERE medical_history.doctor_no = doctor.no 
and medical_history.patient_no = patient.no;

注意select那里,可能会报错重复定义,使用as 可以解决,像doctor.name as doctor_name
在这里插入图片描述
注意:创建表时要加AS create view xxxx as

在派生出的表上进一步查询

比如,求出总成绩最高的学生,首先需要求一个总成绩的表,然后从中在查出总成绩最高的记录。
这里注意:派生出的表需要起别名(比如下面程序中的table1)才能进一步查询。
注意还有一个更坑的问题:在不使用group by 并且select后面出现聚集函数时,那么所有被select的属性都应该是聚集函数,否则就会报错
下面会报错:

-- (17) 查询计算机系考试成绩最高的学生姓名。
SELECT name_temp, MAX(grade_temp)
FROM (
   SELECT Student.Sname as name_temp, SUM(SC.Grade) as grade_temp
   FROM Student, SC
   WHERE Student.Sdept='计算机' and Student.Sno=SC.Sno
   GROUP BY Student.Sname
) table1;  -- table1 是别名,是必须有的

原因是name_temp 不是聚集函数,而MAX(grade_temp) 是。
真实的原因是,嵌套中不能使用聚合函数,只有最外层可以使用聚合函数。

求数量

-- (22) 创建内容为统计每个学生的选课门数的视图,要求列出学生学号和选课门数;
CREATE VIEW view22 AS
SELECT Sno, COUNT(Cno)
FROM SC
GROUP BY Sno;

这里一脸懵逼,之前看的不是select后面聚合函数不能和直接的属性一起用吗?怎么这里可以????哦哦前面说过,有个条件是不适用group by,这里使用了,所以没事。

建表

使用枚举类型

-- 订单表
CREATE TABLE order_form(
    id INT AUTO_INCREMENT,
    state ENUM('待付款', '待发货', '运输中', '待签收') DEFAULT '待付款',
    PRIMARY KEY(id)
);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

匿名匿名匿名11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值