2018-08-07 MySQL Database Inquiry1

1.SQL概述

•SQL语言(Structured Query Language)是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统.

•sql 语句就是对数据库进行操作的一种语言。

2.语句分类

2018-08-07 MySQL Database Inquiry1_第1张图片

3.sql语言基础

•快速了解SQL 的常用定义语句:数据库的创建,表的创建,修改数据库的创建

3.1数据库的操作

CREATE DATABASE 数据库名 [CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'] 设置数据库字符集及字符集校对规则

•【例】CREATE DATABASE exam CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';

#2  ENGINE=INNODB DEFAULT CHARSET=utf8;(加到创建表后面 如);

CREATE TABLE product (pro_id INT PRIMARY KEY,pro_name VARCHAR(14) NOT NULL,pro_sub_id INT(2),pro_num INT(4),pro_price  number(7,2))ENGINE=INNODB DEFAULT CHARSET=utf8;

~取小数点后几位数用number float会失精 number(a,b)   a数据的最长长度,b数据小数显示的长度

~float设置精度 只有一个值    float(a)  a数据的最长长度,数据的小数默认显示2位

~int(无需设置字符长度)

切换database:use 数据库名

•【例】USE exam

数据库的修改 (中文字符的改变)

alter database exam character set utf8;

数据库的删除  

drop database 数据库名

3.2 表的操作

表的创建

•CREATE TABLE 表名(属性1 数据类型[长度] [约束],......) [ENGINE=INNODB DEFAULT CHARSET=utf8];(存储引擎及字符集)如

约束 数据类型介绍

表的修改

Alter table 表名

•添加字段   Alter table 表名 add column 列名  类型

•添加约束  Alter  table 表名 alter  column  列名  set  default  ‘value';

•alter  table  表名  add  constraint  主键名  primary  key  表名(主键字段);

•alter  table  表名  add  constraint   外键名   foreign   key  (外键字段)  references  关联表名(关联字段);

•修改字段    Alter  table 表名 change  原字段名  新字段名  数据类型  [ 属性 ];(mysql)

•alter table emp modify e_name varchar(100)   (oracle修改字符长度)

•删除字段  alter  table  表名  drop  字段名

修改约束 alter  table  表名  add  constraint   外键名   foreign   key  (外键字段)  references  关联表名(关联字段);

表的删除

Drop table 表名;

表的数据的插入

Insert into 表名(列1,列2,。。。。) values ();

表的数据的更新

update  表名  set  列名  =  更新值 [ where  更新条件];

表的数据的删除

Delete from  表名   [ where  更新条件];

3.3 基本的SELECT 命令

SELECT 识别什么列

 FROM  识别哪个表

书写规范

1、sql语句的所有表名、字段名全部小写,系统保留字、内置函数名、sql保留字大写。

2、连接符or、in、and、以及=、<=、>=等前后加上一个空格。

3、对较为复杂的sql语句、过程、函数加上注释,说明算法、功能。

4、单行注释:#

5、多行注释:/* ... */,在这之间的所有语句都会被注释

6、多表连接时,使用表的别名来引用列。

语句规则

SQL 语句是大小写不敏感

SQL 语句可写成一行或多行

一个关键字不能跨多行或缩写

子句通常位于独立行,以便编辑,并易读

空格和缩进使程序易读

关键字大写,其他小写

3.3.1   列的操作

选择所有列

SELECT     *    FROM  deptf; (deptf 是表名,*  代表所有列)

选择指定列

SELECT    asd    FROM    deptf ;(  asd时列的名字)

3.3.2  算术表达式

NUMBER和DATE型数据可用算数运算创建表达式

+  -  *  /

空值是指不可用,不知道,不适用的值;空值不等于零或空格;

包括空值的算法表达式等于空;

所以若一个表中,有属性的值为空(NULL);如现在有两个属性,sal和comm,其中,sal的值为3000,comm的值为NULL,则他们的相加运算可如下

sal   +  IFNULL(comm,0)  ;可理解为若comm的值为空时,sal的值3000与0相加


定义列的别名

改变列的标题头

使用计算结果

列的别名

如果使用特殊字符,或大小写敏感,或有空格时,需加引号

(三种该别名的方法)

SELECT ename "Name",   sal*12 "Annual Salary"   FROM  emp

SELECT ename    Name,   sal*12      AnnualSalary     FROM  emp

SELECT ename  AS  Name,   sal*12    AS  ‘Annual Salary’   FROM  emp

删除重复行    DISTINCT

SELECT DISTINCT deptno FROM  emp

限制返回行数   LIMIT      

SELECT   *  FROM  emp   LIMIT  5     ;返回5行数数据

SELECT  *  FROM  emp LIMIT 2  OFFSET 3      ;从第三行开始,返回2行的行数

SELECT  *  FROM  emp LIMIT   3,2                   ;从第三行开始,返回2行的行数

使用选择限定记录  WHERE   ;  ORDER BY  

SELECT ename, job, deptno  FROM  emp  WHERE  job='CLERK'   :从emp表中查找 jop 是CLERK的 ename, job, deptno


字符串和日期要用单引号扩起来

字符串是大小写敏感的,日期值是格式敏感的

缺省的日期格式是 'DD-MON-YY'


比较运算符

2018-08-07 MySQL Database Inquiry1_第2张图片

SELECT ename, sal, comm    FROM  emp  WHERE  sal<=comm;

其它的比较运算符

2018-08-07 MySQL Database Inquiry1_第3张图片

   使用BETWEEN  ...and...  运算符(显示某一 值域范围的记录)

SELECT ename, sal  FROM emp  WHERE sal BETWEEN 1000 AND 1500

使用IN运算符  

SELECT empno, ename, sal, mgr  FROM emp    WHERE mgr IN (7902, 7566, 7788)  ;  查找mgr 在 (7902, 7566, 7788) 之中的empno, ename, sal, mgr

使用LIKE运算符

使用LIKE运算符执行通配查询

查询条件可包含文字字符或数字

1. %  可表示零或多个任意字符

2.  _  可表示一个字符

SELECT ename

    FROM emp

    WHERE ename LIKE 'S%'  ; (在emp表中查找  ename 以S开头后面任意 的 ename)

SELECT ename

    FROM emp

    WHERE ename LIKE '_A%' ;(在emp表中 查找  ename 第一个字符任意第二是A后面任意字符的 ename)

3.  [ ] :表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。

比如 SELECT * FROM [user] WHERE u_name LIKE '[张李王]三'

将找出“张三”、“李三”、“王三”(而不是“张李王三”);

如 [ ] 内有一系列字符(01234、abcde之类的)则可略写为“0-4”、“a-e”

SELECT * FROM [user] WHERE u_name LIKE '老[1-9]'

将找出“老1”、“老2”、……、“老9”;

4. [^ ] :表示不在括号所列之内的单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符。

比如 SELECT * FROM [user] WHERE u_name LIKE '[^张李王]三'

将找出不姓“张”、“李”、“王”的“赵三”、“孙三”等;

SELECT * FROM [user] WHERE u_name LIKE '老[^1-4]';

将排除“老1”到“老4”,寻找“老5”、“老6”、……

5,查询内容包含通配符时

由于通配符的缘故,导致我们查询特殊字符“%”、“_”、“[”的语句无法正常实现,而把特殊字符用“[ ]”括起便可正常查询。据此我们写出以下函数:

function sqlencode(str)

str=replace(str,"[","[[]") '此句一定要在最前

str=replace(str,"_","[_]")

str=replace(str,"%","[%]")

sqlencode=str

end function

在查询前将待查字符串先经该函数处理即可,并且在网页上连接数据库用到这类的查询语句时侯要注意:

如Select * FROM user Where name LIKE '老[^1-4]';上面 《'》老[^1-4]《'》是要有单引号的,别忘了,我经常忘

使用IS NULL运算符

SELECT ename, mgr

    FROM    emp

    WHERE  mgr IS NULL ;(在emp表中查找  mgr 是空值的 ename,mgr)

逻辑运算符

2018-08-07 MySQL Database Inquiry1_第4张图片

AND需要条件都为TRUE

SELECT empno, ename, job, sal

    FROM  emp

    WHERE  sal>=1100

    AND    job='CLERK';

OR需要条件之一是TRUE

SELECT empno, ename, job, sal

    FROM  emp

    WHERE  sal>=1100

    OR    job='CLERK'

SELECT ename, job

    FROM  emp

    WHERE  job NOT IN ('CLERK','MANAGER','ANALYST');

优先级规则(括号大于所有优先级)

2018-08-07 MySQL Database Inquiry1_第5张图片

ORDER BY

使用ORDER BY 子句将记录排序

ASC: 升序,缺省(升序,有时不用ASC;如下)

DESC: 降序

SQL> SELECT ename, job, deptno, hiredate

    FROM    emp

    ORDER BY hiredate DESC;  降序


SQL> SELECT ename, job, deptno, hiredate

    FROM    emp

    ORDER BY hiredate ASC;升序


SQL> SELECT ename, job, deptno, hiredate

    FROM    emp

    ORDER BY hiredate ;升序


使用列的别名排序

SELECT empno, ename, sal*12 annsal

    FROM    emp

    ORDER BY annsal 

多个列排序 

SQL> SELECT ename, deptno, sal

    FROM emp

    ORDER BY deptno ASC, sal DESC     ;(先是以deptno升序排列,若deptno有相同的,再以sal降序排列)

你可能感兴趣的:(2018-08-07 MySQL Database Inquiry1)