1、连接查询和关联查询
连接查询:把两个表中相同的元素的连接就可以查询,
使用:where里,select table1.*,table2.* from table1,table2 where table1.id=table2.id;

关联查询:把两个表关联,之后的操作对两个表都有影响(left join,right join,full join,

inner join)
使用:不用where,select table1.*,table2.* from table1 (inner)join table2 on

table1.id=table2.id;

(1)SELECT * FROM score, student WHERE score.id = student.id ...
(2)SELECT * FROM score JOIN student ON (score.id = student.id) WHERE ...
(3)SELECT * FROM score JOIN student USING (id) WHERE ...
前两种写法,只是写法不同而已,其功能完全相同;最后一种,会将同名的列,合并起来。
第一种,是传统写法,SQL89标准里,就是这种;后面两种,是在SQL92标准才有的!

2、多表查询(连接查询)关系数据库中最主要特征
无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接连接。

连接:
(1)自连接;一个表自己与自己建立连接称为自连接或自身连接。可以把一个表的某一行与同一表中的

另一行连接起来。

(2)内连接;
语法:select 字段名列表 from 表名 [inner] join 表名 on 连接条件 [where 条件表达式]
分类:
(1)等值连接:是指表之间通过“等于”关系连接起来,产生一个临时表。
(2)不等值连接:是指表之间的连接关系不是“等于”,而是其它关系
这些运算符包括>、>=、<=、<、!>、!<和<>。
(3)自然连接:在等值连接中消除重复列就是自然连接。表A natural join B where 连接条件

(3)外连接;外连接是对内连接的扩充,除了将两个数据集合中重叠部分以内的那些数据行连接起来之外

,

(4)交叉连接;交叉连接不使用任何连接条件来限制结果集合,将各表的记录以“笛卡尔”积的方式组合

起来。

(5)联合查询:UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显

示。

(6)复杂查询:---复合连接,三个表以上的连接。

3、查询平均成绩

select class_name as 班级名,avg(stu_score1)  as 平均成绩 from stu_table,class_table where stu_table.class_id=class_table.class_id;

4、查询成绩排名的前五名
select stu_name,stu_score1 from stu_table order by stu_score1 desc limit 5 ;

5、在college_id字段后边加入tel字段
alter table stu_table add tel varchar(15) after college_id;

6、-- 把tel字段修改成tel1 --

alter table stu_table change tel tel1 varchar(30);

7、新建表(SQL语句建表)(需要刷新才能见到)
create table test1(

test_id int not null auto_increment,

test_title varchar(100) not null,

test_author varchar(40) not null,

primary key ( test_id )

);
字段使用not null属性,不希望这个字段值为null。
字段使用auto_increment属性告诉我们自动带有增加id字段下一个可用编号
字段primary key用于定义此列作为主键

8、新建表(通过命令行提示符来创建表)使用数据库TUTORIALS,建立表tutorials_tbl
root@host# mysql -u root -p
Enter password:
mysql> use TUTORIALS;
Database changed
mysql> CREATE TABLE tutorials_tbl(
-> tutorial_id INT NOT NULL AUTO_INCREMENT,
-> tutorial_title VARCHAR(100) NOT NULL,
-> tutorial_author VARCHAR(40) NOT NULL,
-> submission_date DATE,
-> PRIMARY KEY ( tutorial_id )
-> );
Query OK, 0 rows affected (0.16 sec)
mysql>

9、-- 删除表 --
drop table tutorials_tbl; key用于定义此列作为主键。

10、my sql约束条件
(1)主键(PRIMARY KEY)
标识该属性为该表的主键,可以唯一的标识对应的记录。
(2)外键(FOREIGN KEY)
标识该属性为该表的外键,与某个表的主键关联。
(3)唯一性(UNIQUE)
标识该属性的值是唯一的。
(4)非空(NOT NULL)
标识该属性不能为空。
(5)默认值(DEFAULT)
为该属性设置默认值。
* MySQL不支持CHECK约束,但可以使用CHECK约束而没有任何效果。

#建表(班级表)

create table t_class(

id int primary key auto_increment, #班级id为主键,id设置自增长

className varchar(20) unique not null #班级名称,不能为空且唯一

);

#创建学生表

create table t_student(

id int primary key auto_increment, #学生id为主键,id自增长

name varchar(20) unique not null, #学生姓名,不能为空且唯一

sex varchar(1) not null, #学生性别,不能为空

birthday datetime not null default '1992-10-01 00:00:00', #学生出生日期,不能为空,默认

值为1992-10-01 00:00:00

classId int, #学生所属的班级id为外键,关联班级表't_class'的主键id

constraint test_class foreign key(classId) references t_class(id) #创建外键约束,约束名

为test_class

);

11、mysql视图
理由(原因):
(1)安全性,用于权限与视图进行绑定,使用特性:grant语句针对视图进行授予权限
(2)查询性能提高
(3)灵活性的功能需求,改动表的结构工作量大,使用虚表达到少修改效果
(4)复杂的查询需求
视图的内容没有存储,而是在视图被引用的时候才派生出数据。这样不会占用空间,由于是即时引

用,视图的内容总是与真实表的内容是一致的。
视图这样设计有什么好处?节省空间,内容是总是一致的话,那么我们不需要维护视图的内容,维

护好真实表的内容,就可以保证视图的完整性了。

针对每个表创建一个视图(注:视图也是一种表,是虚拟表。不能与已有的表(视图)出现重名)
create view teams(字段,字段,字段) as select distinct(字段,字段) from 表名
例如:#创建视图

create view test3(stu_id,stu_name,stu_score1,stu_sex) as
select distinct stu_id,stu_name,stu_score1,stu_sex from stu_table;

12、数据库优化1
应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,
Sql 代码 : select id from t where num=10 or num=20;
可以这样查询:
Sql 代码 : select id from t where num=10 union all select id from t where num=20;

13、数据库优化2
in 和 not in 也要慎用,否则会导致全表扫描,如:
Sql 代码 : select id from t where num in(1,2,3);
对于连续的数值,能用 between 就不要用 in 了:
Sql 代码 : select id from t where num between 1 and 3;

14、数据库优化3
应尽量避免在 where 子句中对字段进行表达式操作, 这将导致引擎放弃使用索引而进行全表扫描。
Sql 代码 : select id from t where num/2=100;
可以这样查询:
Sql 代码 : select id from t where num=100*2;

MySQL学习(二)SQL语句的总结的更多相关文章

  1. MySQL学习(二)——SQL语句创建删除修改以及中文乱码问题

    一.对数据库的操作 1.创建一个库 create database 库名; 创建带有编码的:create database 库名 character set 编码; 查看编码:show create ...

  2. mysql学习之 sql语句的技巧及优化

    一.sql中使用正则表达式 select name,email from user where email Regexp "@163[.,]com$"; sql语句中使用Regex ...

  3. MYSQL学习笔记——sql语句优化工具

    优化sql:思路: 使用explan->先查询type类型看看是all还是ref,然后判断 possible_keys (显示可能应用在这张表中的索引, 一个或多个.查询涉及到的字段是若存在索引 ...

  4. MySQL学习【SQL语句上】

    1.连接服务端命令 1.mysql -uroot -p123 -h127.0.0.1 2.mysql -uroot -p123 -S /tmp/mysql.sock 3.mysql -uroot -p ...

  5. MYSQL学习笔记——sql语句优化之索引

    上一篇博客讲了可以使用慢查询日志定位耗时sql,使用explain命令查看mysql的执行计划,以及使用profiling工具查看语句执行真正耗时的地方,当定位了耗时之后怎样优化呢?这篇博客会介绍my ...

  6. MySQL的常用SQL语句.md

    修改密码 这是常见的大家一般都要用的 首先     安装成功了打开cmd --> mysql -u root -p -->输入你的密码     修改mysql root用户密码    格式 ...

  7. Oracle,SQL Server 数据库较MySql数据库,Sql语句差异

    原文:Oracle,SQL Server 数据库较MySql数据库,Sql语句差异 Oracle,SQL Server 数据库较MySql数据库,Sql语句差异 1.关系型数据库 百度百科 关系数据库 ...

  8. MySQL数据库:SQL语句基础、库操作、表操作、数据类型、约束条件、表之间的关系

    数据库相关概念: 1. 数据库服务器:运行数据库管理软件的计算机 2. 数据库管理软件:MySQL.Oracle.db2.slqserver 3. 库:文件夹,用来组织文件/表 4. 表:文件(类似于 ...

  9. mysql一条sql语句如何执行的?

    mysql 一条sql语句如何执行的? 文章内容源自:极客时间-林晓彬老师-MySQL实战45讲 学习整理 在了解一条查询语句如何执行之前,需要了解下MySQL的基本架构是怎样的,如下图所示: 可以看 ...

  10. 技术分析 | 浅谈在MySQL体系下SQL语句是如何在系统中执行的及可能遇到的问题

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 SQL语句大家并不陌生,但某种程度上来看,我们只是知道了这条语句是什么功能,它可 ...

随机推荐

  1. JS中的柯里化与反柯里化

    先占个位 看了一天折资料,感觉清楚多了

  2. SQL Server 2016 CTP2.2 的关键特性

    SQL Server 2016 CTP2.2 的关键特性 正如微软CEO 说的,SQL Server2016 是一个Breakthrough Flagship  Database(突破性的旗舰级数据库 ...

  3. Visual Studio 2015 前端开发工作流

    Visual Studio 2015 CTP 5,全称为 Visual Studio 2015 Community Technology Preview 5,意为社区技术预览版,之前的版本为:Visu ...

  4. HTML5- Canvas入门(七)

    这是本系列的最后一篇入门文章,主要是对剩余的未说明的canvas方法来逐个介绍. 首先,如果你是一名擅长矢量设计的设计师,对Illustrator或者Fireworks很熟悉的话,那你肯定知道它们有一 ...

  5. AngularJS基础入门初探

    一.AngularJS简介 1.1 什么是AngularJS (1)一款非常优秀的前端JS框架,可以方便实现MVC/MVVM模式 (2)由Misko Hevery 等人创建,2009年被Google所 ...

  6. Python调用C++的DLL

    import os import sys from ctypes import * test = cdll.LoadLibrary('D:\Python27\py.dll') print test.A ...

  7. 说说SQL Server 网络配置

    打开Sql Server Configuration Manager,里面显示了SQL Server的网络配置,这些到底表示什么含义呢? 图一:MSSQLSERVER的协议 这些配置选项,其实就是为了 ...

  8. 代码提交的时候可以插入表情了-GitHub表情的使用

    GitHub官方有个表情项目,旨在丰富文字信息.意味着你可以在提交代码的时候,在提交信息里面添加表情,同时也可以在项目的ReadMe.md文件里面使用表情.除此之外,当然还有项目在GitHub上的wi ...

  9. iOS-证书申请

    本文讲述发布证书的申请 首先登陆https://developer.apple.com(99美元账号) a.点击页面右上角 b.进入 c.选择证书类型 distribution,选择添加 d.点击+后 ...

  10. UIwebView 和 H5交互详情

    背景: 最近公司准备上一个只有原生登录界面 + H5网页 ,并且支持ios7.0 以上系统的混合app;这可把我难住了,原生的UI界面我可以正写反写各种style把界面搭建起来.而要这个app的难点在 ...