1.SQL语句简单介绍:
SQL(结构化查询语言(Structured Query Language))包含6个部分(数据查询语言DQL、数据操作语言DML、数据定义语言DDL、事务处理语言TPL、数据控制语言DCL、指针控制语言CCL),在Java中常用的有三种,DQL、DML、DDL:
一:数据查询语言(DQL):
其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与其他类型的SQL语句一起使用。
二:数据操作语言(DML):
其语句包括动词INSERT,UPDATE和DELETE。它们分别用于添加,修改和删除表中的行。也称为动作查询语言。
三:数据定义语言(DDL):
其语句包括动词CREATE和DROP。在数据库中创建新表或删除表(CREAT TABLE 或 DROP TABLE);为表加入索引等。DDL包括许多与数据库目录中获得数据有关的保留字。它也是动作查询的一部分。
四:事务处理语言(TPL):
它的语句能确保被DML语句影响的表的所有行及时得以更新。TPL语句包括BEGIN TRANSACTION,COMMIT和ROLLBACK。
五:数据控制语言(DCL):
它的语句通过GRANT或REVOKE获得许可,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。
六:指针控制语言(CCL):
它的语句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作。
2.MySQL列类型对应Java的数据类型:
MySQL列类型 Java数据类型
-------------------------------------------------------
INT: int/Integer
BIGINT: long/Long
FLOAT float/Float
DOUBLE double/Double
DECIMAL BigDecimal
---------------------------------------------------------
3.数据库的操作:
查看数据库服务器存在哪些数据库:
SHOW DATABASES;
使用指定的数据库:
USE database_name;
创建指定名称的数据库:
CREATE DATABASE database_name;
删除数据库:
DROP DATABASE database_name;
注意:在MySQL中,日期时间值使用单引号引起来。 相当于Java中Date,Calender
4.表的操作:
创建表:
1.先进入某一个数据库: use database_name;(指定创建的表应该在哪个数据库)
2.输入建表的SQL命令:
CREATE TABLE 表名(
列名1 列的类型 [约束],
列名2 列的类型 [约束],
....
列名N 列的类型 约束
);
注意:最后一行没有逗号
注意:不能使用MySQL中的关键字作为标识符.
比如:订单表(order),但是ORDER是SQL中排序的关键字.
解决方案:
方式1:使用反引号,把关键字引起来:`ORDER`.
方式2:开发中,习惯t_表名;
查看数据库中存在哪些表:
SHOW TABLES;
查看表结构:
DESC table_name;
查看表的详细定义:(显示创建表的语句cd)
SHOW CREATE TABLE table_name;(定义表的SQL语句)
删除表:
DROP TABLE table_name;
表的约束:
表的约束(针对于某一列):
1.非空约束(NK):NOT NULL,不允许某列的内容为空。
2.设置列的默认值:DEFAULT。
3.唯一约束(UK):UNIQUE,在该表中,该列的内容必须唯一。
4.主键约束:PRIMARY KEY,约束在当前表中,指定列的值非空且唯一。
5.主键自增长:AUTO_INCREMENT,从1开始,步长为1。(常和主键配合使用)
6.外键约束:FOREIGN KEY,A表中的外键列.A表中的外键列的值必须参照于B表中的某一列(B表主键)可以为NULL
主表:不用依赖其他表,可以独立存在
从表:外键列的数据要参照于主表中的数据,有外键列的表为从表
主键/外键的起名规则:
主键:id
外键:xx_id:xx只的是参照表的名词,productdir_id,也可以简写,dir_id
注意:在MySQL中,InnoDB支持事务和外键.
修改表的存储引擎为InnoDB:
ALTER TABLE 表名 ENGINE='InnoDB';
开发中,有时从性能考虑,我们会删除外键.但是依然使用InnoDB存储引擎.
消除结果中重复的数据。
语法:
SELECT DISTINCT 列名,..
设置列名的别名。
关键字:[AS]
1、改变列的标题头;
2、用于表示计算结果的含义;
3、作为列的别名;
4、如果别名中使用特殊字符,或者是强制大小写敏感,或有空格时,都需加单引号;--->英文单词
需求:查询所有货品的id,名称,各进50个,并起别名的成本
SELECT id,productName,costPrice * 50 'price' FROM product
使用别名注意事项:
SQL语句是有一定的执行顺序的,如若别名还没定义出来,就先使用了,就会出错,如:
SELECT id,productName,salePrice*cutoff pf FROM product WHERE pf>350(错误的)
SQL语句是先执行where语句再执行select的,而在执行where时,pf都还定义,故会出错
SQL的执行顺序:
1.先执行FROM子句: 确定查询哪一张表
2.接着执行WHERE : 过滤筛选条件
3.接着做SELECT : 确定选择的列
4.最后做ORDER BY: 对结果集按照某列排序
优先级:
优先级 运算符
------------------------------------
1 所有比较运算符
2 NOT
3 AND
4 OR
注意:括号将跨越所有优先级规则
对结果集排序
使用ORDER BY子句将结果的记录排序.
ASC : 升序,缺省。
DESC: 降序。
ORDER BY 子句出现在SELECT语句的最后。
格式:
SELECT <selectList>
FROM table_name
WHERE 条件
ORDER BY 列名1 [ASC/DESC],列名2 [ASC/DESC]...;
注意:别名不能使用引号括起来,否则不能排序。(下面的排序将失效)
SELECT *,salePrice*cutoff 'pf' FROM product WHERE productName LIKE '%M%' ORDER BY 'pf'
SELECT语句执行顺序:
先执行FROM--->接着执行WHERE--->再执行SELECT--->最后执行ORDER BY