一、外键
表my_contacts(contact_id,phone,email,gender,interests),由于interests可以有多个值,不具备1NF,因此可以将interests单独作为一个表,interests(interest_id,interest,contact_id),contact_id用来表示“兴趣”是谁的,它的值与my——contacts中的contact_id一致。像interests表中的contact_id列称为外键(foreign key)。
外键用于确认一张表中的行与另外一张表中的行对应。主键不能为null,但是外键可以是null,外键为null时表示父表中的行没有对应。外键的值并没有唯一性。外键不一定是父表中的主键,但是它在父表中必须有唯一性。插入外键的值必须已经在父表中的行里面出现过的值(引用完整性)。
CREARE TABLE interests ( interest_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, interest VARCHAR(50) NOT NULL, contact_id INT NOT NULL, CONSTRAINT my_contacts_contact_id_fk #键的来源 FOREIGN KEY(contact_id) REFERENCES my_contacts(contact_id) );
有外键约束时,如果试图删除父表中的行或者改变值时,而其值为另个表的外键,那么这时会受到警告。如果真的需要如此操作,可以先移除外键,再做修改。
二、表间关系
表间关系有三种:一对一(不常见)、一对多、多对多。对于多对多,可以用junction table来避免表中过多的重复组。
woman(woman_id,woman,shoes_is)、shoes(shoes_id,name)
woman(woman_id,woman)、shoes(shoes_id,name,woman_id)
woman(woman_id,woman)、shoes(shoes_id,name)、junctiontable(woman_id,shoes_id)
三、组合键 、依赖 、2NF、3NF
组合键是用多个数据列构成的主键,组合后具有唯一性,起主键的作用。例如:表中某两列均不是主键,但是组合后就是主键了。
依赖 :列x的值改变那么列y的值必须改变,则称列y函数依赖与列x,记为T.y->T.x。例如:名字简写依赖于名字,城市依赖于国家等。部分函数依赖:T.y->T.x,列x与其他列组合成主键。传递函数依赖:两个非主键列形成的函数依赖。2NF:符合1NF,没有部分函数依赖。如果表中有人工主键且没有组合主键,则符合2NF。3NF:符合2NF,没有传递函数依赖。
四、AS
AS能把SELECT查询的内容插入到一个新表中,不过,要求查询的列名与表的列名一致。
CREATE TABLE profession ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY; profession VARCHAR(20); ); INSERT INTO profession (profession) SELECT profession FROM my_contacts GROUP BY profession ORDER BY profession; CREATE TABLE profession AS SELECT profession FROM my_contacts GROUP BY profession ORDER BY profession; ALTER TABLE profession ADD COLUMN id INT NOT NULL AUTO_INCREMENT FIRST; ADD PRIMARY KEY (id); CREATE TABLE profession ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY; profession VARCHAR(20); )AS SELECT profession FROM my_contacts GROUP BY profession ORDER BY profession;
AS还能将列取别名,只需在查询中首次出现列的地方接AS即可。(此时,AS可以省略)
CREATE TABLE profession ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY; prof VARCHAR(20); )AS SELECT profession AS prof FROM my_contacts GROUP BY prof ORDER BY prof;
五、 内联接
交叉联接CROSS JOIN会将两张表的所有行相乘,再从相乘得到的表中进行查询等。
有表toys(toy_id,toy),有30行值和表boys(boy_id,boy),有40行值。
SELECT t.toy b.boy FROM toys AS t CROSS JOIN boys AS b; SELECT toys.toy ,boys.boy FROM toys ,boys;#与上等价 SELECT * FROM toys CROSS JOIN boys ;#返回1200行值,4列,表很大时最好不交叉联接
内联接的格式是:
SELECT somecolumns FROM table1 INNER JOIN table2 ON conditions;
有表toys(toy_id,toy),有30行值和表boys(boy_id,boy,toy_id),有40行值。
SELECT boys.boy toys.toy FROM boys INNER JOIN toys ON boys.toy_id=toys.toy_id; #相等联接,查询男孩拥有的玩具 SELECT boys.boy toys.toy FROM boys INNER JOIN toys ON boys.toy_id<>toys.toy_id ORDER BY boys.boy; #不相等联接,查询男孩没有拥有的玩具 SELECT boys.boy toys.toy FROM boys NATURAL JOIN toys; #自然联接,两个相同名的列合到一起,查询男孩拥有的玩具
六、子查询
子查询就是查询中的查询,它有两部分:内层查询和外层查询。
SELECT mc.name,mc.phone,jc.title FROM my_contacts AS mc NATURAL JOIN job_current AS jc WHERE jc.title IN ('Cook','Waiter','Web Designer'); #外层查询 SELECT title FROM job_listings GROUP BY title ORDER title; #内层查询 SELECT mc.name,mc.phone,jc.title FROM my_contacts AS mc NATURAL JOIN job_current AS jc WHERE jc.title IN (SELECT title FROM job_listings); #可以用IN\NOT IN,单个值用等于 #子查询就是内层查询加上外层查询
子查询的结构为:
SELECT some_columns FROM table WHERE column=(SELECT column FROM table);
SELECT name FROM my_contacts WHERE zip_code=(SELECT zip_code FROM zip WHERE city='Menphis' AND state='TN'); #子查询也可以用联接实现 SELECT name FROM my_contacts NATURAL JOIN zip WHERE zip.city='Menphis' AND state='TN';
在我的联系人里,谁赚的钱最多?
SELECT mc.name,jc.salary FROM my_contacts AS mc NATURAL JOIN job_current AS jc WHERE jc.salary=(SELECT MAX(jc.salary) FROM job_current jc);
子查询可以放在SELECT子句中用来表示某次欲选的值,这时一次只能返回一个值。
SELECT mc.name (SELECT state FROM zip WHERE mc.zip=zip.zip) AS state FROM my_contacts mc;
非关联子查询:如果子查询可以独立运行且不会引用外层查询的任何结果。
比Andy工资高的人的信息:
SELECT mc.name,jc.salary FROM my_contacts AS mc NATURAL JOIN job_current AS jc WHERE jc.salary> (SELECT jc.salary FROM my_contacts mc NATURAL JOIN job_current jc WHERE email='andy@weathererorama.com');
关联子查询:内层查询的解析需要依赖外层查询的结果。
联系人中有三项兴趣爱好的人的信息:
SELECT mc.name FROM my_contacts AS mc WHERE 3= (SELECT COUNT(*) FROM interets WHERE contact_id=mc.contact_id);
哪些联系人还没有在job_current表中出现:
SELECT mc.name FROM my_contacts AS mc WHERE NOT EXIST (SELECT COUNT(*) FROM job_current jc WHERE mc.contact_id=jc.contact_id);
要查找哪些人在job_current中出现,只需要将上面的NOT EXIST改为Exist即可。
七、外联接
外联接是返回某一张表的所有行,并且带有另外一张表符合条件的行。内联接只是返回有意义的行。外联接会返回值中如果后一张表没有对应就返回NULL,如果有多个值会返回每一组符合条件的值。
做外联接以左表(第一个表)为标准,又联接以右表为标准。
toys表中有值(1,dog)、(2,cat);boys表中有值(1,Lili,1)、(2,Xiaohong,1),那么如下操作:
SELECT b.boy,t.toy FROM toys t LEFT OUTER JOIN boys b ON t.toy_id=b.toy_id;
那么会得到结果:(Lili,dog),(Xiaohong,dog),(NULL,cat)
八、自联接
自联接把一张表当作两张表进行联接操作。
SELECT p1.name,p2.name AS boss #自联接 FROM personal p1 INNER JOIN personal p2 ON p1.id=p2.boss_id; SELECT p.name, #自联接转换成子查询 (SELECT name FROM personal WHERE p.boss_id=id )AS boss FROM personal p;
九、UNION
SELECT title FROM job_current UNION SELECT title FROM job_desired UNION SELECT title FROM job_listings ORDER BY title;
查询结果只有一列title,它将只要每个查询中出现的title都显示出来,并且重复的只显示一次。如果将UNION改为UNION ALL会将重复的也显示出来。
CREATE TABLE job AS SELECT title FROM job_current UNION SELECT title FROM job_desired UNION SELECT title FROM job_listings ORDER BY title;
出来UNION外,还可以用INTERSECT和EXCEPT来联合,INTERSECT表示将每个查询结果相交,EXCEPT表示将前一个结果减去后一个结果。
十、其它
SELECT name,rating FROM restaurant_rating WHERE rating>ALL (SELECT rating FROM restaurant_rating WHERE name IN('Jack','Tom','Harry');
大于ALL表示大于集合中的最大值的所有值;小于ALL表示小于集合中的最小值的所有值。
SOME和ANY也有相同的用法,SOME和ANY等价。
大于SOME表示大于集合中的最小值的所有值;小于SOME表示小于集合中的最大值的所有值。
这里还可以用>=、<=。
MySQL中能够规定日期的格式:
SELECT DATe_FORMAT(date,'%M %Y') FROM table; #以某月某年显示
MySQL中创建临时表很简单,只需要在table前面加一个temporary:
CREATE TEMPORARY TABLE temp ( some_int INT; some_data VARCHAR(50); ); CREATE TEMPORARY TABLE temp AS SELECT *FROM table;
数据转换需要用到函数:CAST(column,TYPE)
SELECT CAST('2005-02-06' AS DATE); SELECT CAST(2 AS DECIMAL);
不适用CAST的场合有:浮点数转换为整数;TIME、Date、DATETIME、CHAR转换为DECIMAL或INTEGER。
添加索引能够联接多张表并强化数据的完整性。对于很大的表,索引能够加快查询速度,添加索引的命令如下:
ALTER TABLE my_contacts ADD INDEX (name);
查看当前用户,当前日期,当前时间 :
SELECT CURRENT_USER; SELECT CURRENT_DATE; SELECT CURRENT_TIME;
一些有用的数学函数:
SIN(x),ASIN(x),ABS(x),EXP(x),LN(x),LOG(x),LOG(x,y),SIGN(x),SQRT(x),POWER(x,y),PI(),RAND()
CEIL(x)比x大的最小整数,ROUND(x)四舍五入至整数,FORMAT(x,y)四舍五入保留y位小数得到文本,
ROUND(x,y)四舍五入保留y位小数得到数字,MOD(x,y)x除以y的余数,TRUNCATE(x,y)截断至y位小数
相关推荐
8x8LED汉字显示是一种基于8x8LED点阵模块的显示技术。该技术通过控制64个LED灯的亮灭状态,可以在一个8行8列的矩阵中显示出简单的汉字或符号。每个交点对应一个LED灯,通过微控制器(如单片机、Arduino、STM32等)生成和控制显示数据,实现汉字的点阵显示。 在8x8LED汉字显示系统中,通常需要先获取或创建包含所需汉字的8x8点阵字模数据。这些数据表示了每个汉字在点阵中的亮灭状态。然后,通过编程控制微控制器按照字模数据逐行或逐列地更新LED灯的状态,从而实现汉字的显示。 由于8x8点阵的分辨率有限,只能显示较为简单的汉字。但该技术具有体积小、硬件简单、电路结构简洁及容易实现等优点,广泛应用于各种电子显示系统中,如公交汽车、商店、学校等公共场所的信息发布和广告宣传。同时,通过合理的硬件连接和软件编程,还可以对显示内容进行实时控制,实现动态显示效果。
基于Simulink的车辆横向EPS与纵向ABS联合仿真模型开发:多场景下的四轮ABS建模与控制策略研究,基于Simulink仿真的车辆动态控制联合模型研究:四轮ABS与横向EPS建模、多场景控制切换及IMU传感模拟,车辆横向EPS与纵向ABS联合Simulink仿真模型 1.实现对4轮ABS建模、横向EPS建模; 2.可控制切冰雪路面及多道路场景; 3.建模包含驾驶员模型、ABS控制模型、车辆模型及IMU传感模型; 4.实现对车轮车速、滑移率、制动压力、横纵向加速度、偏向角等计算 采用MATLAB编程,版本2022b。 此外,附有参考paper ,车辆; Simulink仿真模型; ABS建模; EPS建模; 冰雪路面多道路场景控制切换; 驾驶员模型; IMU传感模型; 横纵向加速度计算; 制动压力控制; 偏向角计算; MATLAB 2022b; 参考paper。,基于MATLAB 2022b的车辆联合仿真模型:四轮ABS与横向EPS建模研究
中文版学习笔记
Centos7系统中,通常用SSH命令远程连接,SSH命令的常用操作包括: 1.SSH服务的启动及设置系统启动时自动运行 2.SSH服务的重启 3.SSH服务状态查询 4.防火墙允许SSH 5.另一台机器上测试SSH连接等操作 Centos7系统中,通常都已经默认安装好了 vi 或 Vim 文本编辑器 。该文本编辑器的常用方法包括: 1.创建或打开文件 2.光标移动 3.保存及退出vim编辑器 4.删除操作 5.文本搜索 6.复制和粘贴等操作,文件对这些操作命令进行了整理,希望对大家有所帮助。
信捷PLC八轴伺服步进模块化编程:公式计算、报警处理与主流系统应用参考程序,信捷PLC程序分散式控制中大型系统生产线设备,八轴伺服步进模块化编程框架,信捷PLC程序,八轴程序,有伺服也有步进,内部有伺服和步进计算公式算,模块化编程框架,包含各功能区规划,伺服步进电机DOG+JOG,气缸手动,公式计算数据处理,报警功能区,自动步进S调用等。 研究透彻应用此思维,完全能应用上手中大型各日系主流系统,如日本三菱,松下,欧姆龙,基恩士,国内主流信捷,汇川,台达等大型系统生产线设备。 分散式控制是电气工程人员入门和提高的经典参考程序。 ,信捷PLC程序; 八轴程序; 伺服步进; 模块化编程; 公式计算; 报警功能区; 控制系统; 分散式控制; 主流系统; 电气工程。,高级电气控制:PLC程序多轴系统解析与应用研究
基于Maxwell的16极18槽轴向磁通永磁电机模型:1500W高功率、外径190mm的电机设计与学习资源,基于Maxwell的16极18槽轴向磁通永磁电机模型——1500W高功率、外径190mm的电机设计与学习资源,基于maxwell的16极18槽轴向磁通永磁电机模型,功率1500w,外径190mm。 输出转矩3.7Nm.可用于轴向电机设计学习。 大致参数波形见图。 ,基于Maxwell的16极18槽轴向磁通永磁电机模型; 功率1500W; 外径190mm; 输出转矩3.7Nm; 波形图; 电机设计学习用,Maxwell16极18槽永磁电机:功率1500W外径190mm高转矩电机模型
agenda_3cd_01_0718
abraham_01_1106
【资源介绍】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,也可以作为小白实战演练和初期项目立项演示的重要参考借鉴资料。 3、本资源作为“学习资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研和多多调试实践。 基于深度学习技术对Caltech数据集中的图像进行分类(数据集包含101个目标类别和背景类,总计约7999张图像).zip 基于深度学习技术对Caltech数据集中的图像进行分类(数据集包含101个目标类别和背景类,总计约7999张图像).zip 基于深度学习技术对Caltech数据集中的图像进行分类(数据集包含101个目标类别和背景类,总计约7999张图像).zip 基于深度学习技术对Caltech数据集中的图像进行分类(数据集包含101个目标类别和背景类,总计约7999张图像).zip 基于深度学习技术对Caltech数据集中的图像进行分类(数据集包含101个目标类别和背景类,总计约7999张图像).zip 基于深度学习技术对Caltech数据集中的图像进行分类(数据集包含101个目标类别和背景类,总计约7999张图像).zip 基于深度学习技术对Caltech数据集中的图像进行分类(数据集包含101个目标类别和背景类,总计约7999张图像).zip 基于深度学习技术对Caltech数据集中的图像进行分类(数据集包含101个目标类别和背景类,总计约7999张图像).zip 基于深度学习技术对Caltech数据集中的图像进行分类(数据集包含101个目标类别和背景类,总计约7999张图像).zip
anslow_02_0109
agenda_3cd_01_0917
cole_03_0908
CAD软件:PTC Creo Aerospace二次开发_二次开发最佳实践与经验分享
cole_02_0308
anslow_01_0907
ganga_01_0508
brown_3ck_01_0519
anslow_04_0509
ganga_03_0109
dawe_3cd_01_0318