SQL高级 (一)
修改表名
ALTER TABLE 旧表名 RENAME [TO] 新表名;
修改字段
ALTER TABLE 表名 CHANGE 原字段 新字段 数据类型 NOT NULL;
添加字段
ALTER TABLE action_log ADD birthDay COMMENT VARCHAR(100);
删除指定字段
ALTER TABLE action_log DROP COMMENT;
添加主键
ALTER TABLE action_log ADD CONSTRAINT pk_action_log PRIMARY KEY action_log(id);
SQL高级(二)
1.插入单行数据
INSERT INTO checkitem (checkitemName,checkitemCost)
VALUES('血常规',30)
注意列名字段要与列值一一对应,数据类型要一致,有多少列字段就应该有多少列值
2.多行插入数据
INSERT INTO checkitem (checkitemName,checkitemCost)
VALUES('血常规',30),('尿常规',20),('血脂,血糖检查',25);
3.将查询结果插入新表(备份)
1.手动创建表
2.通过语句
INSERT INTO 新表 VALUES
SELECT p.patientName,p.gender,p.phoneNum,p.email FROM 旧表;
要使用该语句执行必须要手动创建表结构
3.自动创建新表进行备份
CREATE TABLE 新表名
(SELECT p.patientName,p.gender,p.phoneNum,p.email FROM 要备份的表名);
4.更新数据(修改)
注意点:如果where条件不加会修改掉整张表的全部数据,如果有多列以逗号隔开。
UPDATE patient(表名) SET patientName='李蕾',email='lilei@qq.com'
where patientID = 3
5.删除表数据
DELETE FROM patient WHERE patientID = 4;
6.删除所有列的数据
会重置自动增长列
TRUNCATE TABLE patient;
7.删除某一列列的数据
UPDATE patient SET patient.address = '';
SQL高级(三)
子查询
SELECT * FROM patient p
WHERE p.birthDate < (SELECT p1.birthDate FROM patient p1 WHERE p1.patientName = '姚维新');
SELECT * FROM prescriptiom p
WHERE p.checkItemID = (
SELECT c.checkitemID
FROM checkitem c
WHERE c.checkitemName = '血常规')
AND p.patientID = (
SELECT p1.patientID
FROM patient p1
WHERE p1.patientName = 'hapo')
ORDER BY P.examDate DESC LIMIT 0,1;
IN
适合于子表比主表数量小
EXISTS
适合于主表比子表数量小