MySQL语言结构的总结

MYSQL语言结构


常量和变量
常量:是指在程序运行过程中值不变的量.
字符串常量:是指用单引号或双引号括起来的字符序列,分为ASCII字符串常量和Unicode字符串常量.
ASCII字符串常量例如:'hello'  'How are you!' 
UNicode字符串常量例如:N'hello' N'How are you!'
每个转义序列以一个反斜杠"/"开始,指出后面的字符使用转义字符来解释,而不是如同字符.
注意:NUL字节与NULL值不同,NUL为一个零值字节,而NULL代表没有值.
数值常量:可以分为整数常量和浮点数常量.
整形常量例如:1894,2,+145345234,-2147483648.
浮点数常量例如:5.26,-1.39,101.5E5,0.5E-2.
十六进制常量:例如:select hex('cat');
日期时间常量:日期时间常量的值必须符合日期和时间的标准.例如:'2012-06-07 08:00:00:00'
位字段值:例如:select bin(b'111101'+0),oct(b'111101'+0);
布尔值:例如:select true false;
NULL:通常表示'没有值','无数据'.


变量:是在程序运行中可以变的,可以分为用户变量和系统变量.
用户变量:用户可以在表达式中使用自己定义的变量.这种变量就是用户变量.
例如:
创建用户变量:
set @name='王林';
set @user1=1,@user2=2,@user3=3;
set @user4=@user3+1;
查询用户变量:
select @name;
使用查询给变量赋值:
use xscj
set @student=(select 姓名 from xs where 学号='081101');
查询:select 学号,姓名,专业名,出生日期 from xs where 姓名=@student;
select @t2:=(@t2:=2)+5 as t2; 结果t2的值为7.
系统变量:
获取mysql的版本:
select @@version;
获取当前系统的时间:
select current_time;
全局系统变量:
set @@global.sort_buffer_size=25000;
会话系统变量:
将当前会话的sql.warnings变量设置为true:set @@SQL_warnings=on;
将系统变量的SQL_select_limit变量设置为10:
set @@session.SQL_select_limit=10;
select @@local.sql_select_limit;
将系统变量的SQL_select_limit变量设置为默认值:
set @@local.sql_select_limit=derault;
得到系统变量清单:
show variables;
show variables like 'char%';


运算符与表达式
算术运算符:+,-,*,/,%.
比较运算符:=,<>,<=,>=,<,>.
逻辑运算符:
NOT运算符:select not 1,not 0,not(1=1),not(10>9);
AND运算符:select (1=1) and (9>10),('a'='a') and ('c'='d');
OR运算符:select (1=1) or (9>10),('a'='b') or (1>2);
XOR运算符:select (1=1) xor (2=3),(1<2) xor (9>10);
位运算符:
(1)"|"运算符和"&"运算符
select 13|28,3|4,13&28,3&4;
(2)<<和>>运算符
select 1<<<7,64>>1;
(3)"^"运算符
select 1^0,12^5,123^23;
(4)"~"运算符
select ~18446744073709551614,~1;


系统内置函数
数学函数:
(1)greatest()和least()函数分别获得最大值和最小值.
select greatest(10,9,128,1),least(1,2,3);结果为128,1
(2)floor()和ceiling()函数分别获得小于一个数的最大数值和大于一个数的最小数值.
select floor(-1.2),ceiling(-1.2),floor(9.9),ceiling(9.9);结果为-2,-1,9,10.
(3)round()和truncate()函数获取一个数的四舍五入的整数值和把一个数字截取一个指定小数个数的数字.
select round(5.1),round(25.501),round(9.8);
select truncate(1.54578,2),truncate(-76.12,5);
(4)abs()函数获的一个数的绝对值
select abs(-878),abs(-8.345);
(5)sign()函数返回的结果是整数(1),负数(-1),零(0).
select sign(-2),sign(2),sign(0);
(6)sqrt()函数返回一个数的平方根.
select sqrt(25),sqrt(15),sqrt(1);
(7)pow()函数以一个数作为另一个数的指数.
select pow(2,2),pow(10,-2),pow(0,3);
(8)sin(),cos(),tan()函数返回一个角度的正弦,余弦,正切值.
select sin(1),cos(1),tan(radians(45));
(9)asin(),acos(),atan()函数返回一个角度的反正弦,反余弦,反正切值.
select asin(1),acos(1),atan(radians(45));
(10)bin(),otc(),hex()函数
select bin(2),oct(12),hex(80);


聚合函数
字符串函数:
(1)ASCII (char)
返回字符表达式最左端字符的ASCII值。参数char的类型为字符型的表达式,返回值为整型。
返回字母A的ASCII码值:SELECT ASCII('A');
(2)CHAR()函数
语法格式:
CHAR (x1,x2,x3,…) 
将x1、x2……的ASCII码转换为字符,结果组合成一个字符串。参数x1,x2,x3……为介于0~255之间的整数,返回值为字符型。
返回ASCII码值为65、66、67的字符,组成一个字符串:SELECT CHAR(65,66,67);
(3)LEFT和RIGHT函数
语法格式:
LEFT | RIGHT ( str ,x ) 
分别返回从字符串str左边和右边开始指定x个字符。
返回KC表中课程名最左边的3个字符。
USE XSCJ
SELECT LEFT(课程名, 3) 
FROM KC;
(4)TRIM、LTRIM 和RTRIM函数
语法格式:
TRIM | LTRIM | RTRIM(str)
使用LTRIM和RTRIM分别删除字符串中前面的空格和尾部的空格,返回值为字符串。参数str为字符型表达式,返回值类型为varchar。
TRIM删除字符串首部和尾部的所有空格。
SELECT TRIM('  MySQL   ');
(5)RPAD和LPAD函数
语法格式:
RPAD | LPAD( str, n, pad)
使用RPAD和LPAD分别用字符串pad对字符串str的右边和左边进行填补直至str中字符数目达到n个,最后返回填补后的字符串。若str中的字符个数大于n,则返回str的前n个字符。
SELECT RPAD('中国加油',8, '!'), LPAD('welcome',10, '*');
(6)REPLACE函数
语法格式:
REPLACE (str1 , str2 , str3 )
REPLACE函数用于用字符串str3替换str1中所有出现的字符串str2。最后返回替换后的字符串。
SELECT REPLACE('Welcome to CHINA', 'o', 'K');
(7)CONCAT函数
语法格式:
CONCAT(s1,s2,…sn)
CONCAT函数用于连接指定的几个字符串。
SELECT CONCAT('中国', '加油');
(8)SUBSTRING函数
语法格式:
SUBSTRING (expression , Start, Length ) 
返回expression中指定的部分数据。参数expression可为字符串、二进制串、text、image字段或表达式。Start、Length均为整型,前者指定子串的开始位置,后者指定子串的长度(要返回字节数)。如果 expression 是字符类型和二进制类型,则返回值类型与expression的类型相同。如果为text类型,返回的是varchar类型。
说明:LENGTH函数的作用是返回一个字符串的长度。
(9)STRCMP函数
语法格式:
STRCMP(s1,s2)
STRCMP函数用于比较两个字符串,相等返回0,s1大于s2返回1,s1小于s2返回?1。
SELECT STRCMP('A', 'A'), STRCMP('ABC', 'OPQ'),STRCMP('T', 'B');


日期和时间函数
(1)NOW()
使用NOW()函数可以获得当前的日期和时间,它以YYYY-MM-DD HH∶MM∶SS的格式返回当前的日期和时间:
SELECT NOW();
(2)CURTIME()和CURDATE()
CURTIME()和CURDATE()函数比NOW更为具体化,它们分别返回的是当前的时间和日期,没有参数:
SELECT CURTIME(),CURDATE();
(3)YEAR()
YEAR()函数分析一个日期值并返回其中关于年的部分:
SELECT YEAR(20080512142800),YEAR('1982-11-02');
(4)MOTNTH()和MONTHNAME()
MOTNTH()和MONTHNAME()函数分别以数值和字符串的格式返回月的部分:
SELECT MONTH(20080512142800), MONTHNAME('1982-11-02');
(5)DAYOFYEAR(),DAYOFWEEK()和DAYOFMONTH()
DAYOFYEAR(),DAYOFWEEK()和DAYOFMONTH()函数分别返回这一天在一年、一星期及一个月中的序数:
SELECT DAYOFYEAR(20080512),DAYOFMONTH('2008-05-12');
(6)DAYNAME()
和MONTHNAME()相似,DAYNAME()以字符串形式返回星期名:
SELECT DAYNAME('2008-06-01');
(7)WEEK()和YEARWEEK()
WEEK()函数返回指定的日期是一年的第几个星期,而YEARWEEK()函数返回指定的日期是哪一年的哪一个星期:
SELECT WEEK('2008-05-01'),YEARWEEK(20080501);
(8)HOUR()、MINUTE()和SECOND()
HOUR(),MINUTE()和SECOND()函数分别返回时间值的小时、分钟和秒的部分:
SELECT HOUR(155300),MINUTE('15:53:00'),SECOND(143415);
(9)DATE_ADD()和DATE_SUB()
DATE_ADD()和DATE_SUB()函数可以对日期和时间进行算术操作,它们分别用来增加和减少日期值
DATE_ADD()和DATE_SUB()函数的语法格式为:
DATE_ADD | DATE_SUB(date, INTERVAL int keyword)
date是需要的日期和时间,INTERVAL关键字表示一个时间间隔。int表示需要计算的时间值,keyword已经在表6.9中列出。DATE_ADD函数是计算date加上间隔时间后的值,DATE_SUB则是计算date减去时间间隔后的值。
举例:
SELECT DATE_ADD('1986-08-08', INTERVAL 17 DAY);

SELECT DATE_SUB('1998-08-20 10:25:35', INTERVAL 20 MINUTE);


加密函数
(1)AES_ENCRYPT和AES_DECRYPT函数
语法格式为:
AES_ENCRYPT | AES_DECRYPT(str,key)
AES_ENCRYPT函数返回的是密钥key对字符串str利用高级加密标准(AES)算法加密后的结果,结果是一个二进制的字符串,以BLOB类型存储。而AES_DECRYPT函数用于对用高级加密方法加密的数据进行解密。若检测到无效数据或不正确的填充,函数会返回NULL。AES_ENCRYPT和AES_DECRYPT函数可以被看做MySQL中普遍使用的最安全的加密函数。
(2)ENCODE和DECODE函数
语法格式为:
ENCODE | DECODE(str,key)
ENCODE函数用来对一个字符串str进行加密,返回的结果是一个二进制字符串,以BLOB类型存储。DECODE函数使用正确的密钥对加密后的值进行解密。与上面的AES_ENCRYPT和AES_DECRYPT函数相比,这两个函数加密程度相对较弱。
(3)ENCRYPT函数
使用UNIX crypt()系统加密字符串,ENCRYPT(str,salt)函数接收要加密的字符串和用于加密过程的salt(一个可以确定唯一口令的字符串)。在Windows上不可用。
(4)PASSWORD函数
格式为:
PASSWORD(str)
返回字符串str加密后的密码字符串,适合于插入到MySQL的安全系统。该加密过程不可逆,和UNIX密码加密过程使用不同的算法。主要用于MySQL的认证系统。
返回字符串“MySQL”的加密版本。

SELECT PASSWORD('MySQL');


控制流函数
(1)IFNULL和NULLIF函数
IFNULL函数的语法格式为:
IFNULL(expr1,expr2)
此函数的作用是:判断参数expr1是否为NULL,当参数expr1为NULL时返回expr2,不为NULL时返回expr1。IFNULL的返回值是数字或字符串。
SELECT IFNULL(1,2), IFNULL(NULL, 'MySQL'), IFNULL(1/0, 10);
NULLIF函数的语法格式为:
NULLIF(expr1,expr2)
NULLIF函数用于检验提供的两个参数是否相等,如果相等,则返回NULL,如果不相等就返回第一个参数。
SELECT NULLIF(1,1), NULLIF('A', 'B'), NULLIF(2+3, 3+4);
(2)IF函数
和许多脚本语言提供的IF()函数一样,MySQL的IF()函数也可以建立一个简单的条件    测试。
语法格式如下:
IF(expr1,expr2,expr3)
这个函数有3个参数,第一个是要被判断的表达式,如果表达式为真,IF()将会返回第二个参数;如果为假,IF()将会返回第三个参数。
判断2*4是否大于9–5,是则返回“是”,否则返回“否”。
SELECT IF(2*4>9–5, '是', '否');

格式化函数


(1)FORMAT()函数
语法格式为:
FORMAT(x, y)
FORMAT()函数把数值格式化为以逗号间隔的数字序列。FORMAT()的第一个参数x是被格式化的数据,第二个参数y是结果的小数位数。
例如:
SELECT FORMAT(11111111111.23654,2), FORMAT(?5468,4);
(2)DATE_FORMAT()和TIME_FORMAT()函数
DATE_FORMAT()和TIME_FORMAT()函数可以用来格式化日期和时间值。
语法格式如下:
DATE_FORMAT/ TIME_FORMAT(date | time, fmt)
其中,date和time是需要格式化的日期和时间值,fmt是日期和时间值格式化的形式
注意:这两个函数是对大小写敏感的。
(3)INET_NTOA()和INET_ATON()函数
MySQL中的INET_NTOA()和INET_ATON()函数可以分别把IP地址转换为数字或者进行相反的操作。如下面的例子所示:
SELECT INET_ATON('192.168.1.1');


类型转换函数
语法格式:
CAST(expr, AS type)
expr是CAST函数要转换的值,type是转换后的数据类型。
在CAST函数中MySQL支持这几种数据类型:BINARY、CHAR、DATE、TIME、DATETIME、SIGNED和UNSIGNED。
SELECT 1+'99', 1+CAST('99' AS SIGNED);
字符串可以指定为BINARY类型,这样它们的比较操作就成为大小写敏感的。使用CAST()函数指定一个字符串为BINARY和字符串前面使用BINARY关键词具有相同的作用。
SELECT 'a'=BINARY 'A', 'a'=CAST('A' AS BINARY);
说明:两个表达式的结果都为零表示两个表达式都为假。
MySQL还可以强制将日期和时间函数的值作为一个数而不是字符串输出。
将当前日期显示成数值形式。

SELECT CAST(CURDATE() AS SIGNED);


系统信息函数


(1.)DATABASE()、USER()和VERSION()函数可以分别返回当前所选数据库、当前用户和MySQL版本信息:
SELECT DATABASE(),USER(), VERSION();
(2)BENCHMARK() 函数用于重复执行n次表达式expr。它可以被用于计算MySQL 处理表达式的速度。结果值通常为零。另一种用处来自 MySQL客户端内部,能够报告问询执行的次数,根据经过的时间值可以推断服务器的性能。例如:
SELECT BENCHMARK(10000000, ENCODE('hello','goodbye'));
(3)FOUND_ROWS()函数用于返回最后一个SELECT语句返回的记录行的数目。如最后执行的SELECT语句是:
SELECT * FROM XS;
之后执行如下语句:
SELECT FOUND_ROWS();
说明:SELECT语句可能包括一个LIMIT子句,用来限制服务器返回客户端的行数。在有些情况下,需要不用再次运行该语句而得知在没有LIMIT 时到底该语句返回了多少行。为了知道这个行数,包括在SELECT 语句中选择SQL_CALC_FOUND_ROWS,随后调用FOUND_ROWS()。
例如,执行如下语句:
SELECT SQL_CALC_FOUND_ROWS * FROM XS WHERE 性别=1 LIMIT 5; 
之后可以使用FOUND_ROWS()函数,显示在没有LIMIT子句的情况下SELECT语句所返回的行数。

转载于:https://www.cnblogs.com/javaTest/archive/2012/06/07/2589461.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
此为吉林大学数据库的实验报告,实验内容为: 实验一 熟悉MySQL环境及SQL定义语言 一、实验目的: 1. 了解MySQL程序构成、安装、管理方法。 2. 了解MySQL数据库及表结构。 3. 熟练掌握SQL语言进行基本表结构的创建。 4. 熟练应用SQL语言进行表结构的修改。 5. 掌握SQL语言进行基本表的删除。 6. 掌握SQL语言进行索引的建立和删除。 二、实验内容和主要步骤: 1. 参考“MYSQL简体中文参考文档.chm”,熟悉MySQL构成和功能特性。 2. 打开Windows服务管理器,实验启动、停止MySQL服务,了解MySQL的服务管理方法; 3. 打开“MySQL管理控制台.bat”,熟悉控制台中操作数据库; 4. 利用控制台创建“Student数据库”。 5. 打开“Student”数据库,创建如下三个表,按下面的列表中的字段名(英文)、类型和宽度建立: 7. 用SQL语言CREATE TABLE语句创建学生表student、课程表course和选课表SC;(字段类型及长度参照实验一) 8. 用SQL语言ALTER语句修改表结构; a) STUDENT表中SNO设为非空和唯一; b) STUDENT表中增加一个字段SBIRTH,类型设置为日期时间类型,增加一个ADDRESS字段,类型为文本(字符); c) 删除STUDENT表中ADDRESS字段; d) COURSE表中CNO字段设为非空和唯一; 9. 重新定义一个简单表,然后用SQL语言DROP语句删除该表结构; 10. 用SQL语言CREATE INDEX语句定义表STUDENT的SNAME字段的降序索引; 11. 用SQL语言CREATE INDEX语句定义表SC的GRADE字段的升序索引; 12. 用SQL语言DROP语句删除索引; 13. 输入部分数据,并试着修改其中的错误; 注: 实验二 SQL语言进行简单查询 一、实验目的: 1. 掌握SQL查询语句的一般格式 2. 掌握简单数据查询操作。 3. 熟练掌握各种查询条件的表示。 4. 掌握排序和分组操作在SQL语句中的实现。 5. 掌握集函数的使用。 二、实验内容和主要步骤: 1. 创建学生表student、课程表course和选课表SC,并输入数据(注意数据的完整性。);(可以使用实验一中已经建立的表和数据) 2. 对各表中的数据进行不同条件的查询; 1) 查询全体学生的学号和姓名 2) 查询全体学生的详细记录 3) 查询所有选修过课程的学生学号 4) 查询考试有不及格的学生学号 5) 查询不是信息系(IS)、计算机系(CS)的学生性别、年龄、系别 6) 查询选修了4号课的学生学号和成绩,结果按成绩降序排列 7) 查询每个课程号和相应的选课人数 8) 查询计算机系(CS)的学生姓名、年龄、系别 9) 查询年龄18-20岁的学生学号、姓名、系别、年龄; 10) 查询姓刘的学生情况 11) 查询既选修1号课程,又选修2号课程的学生学号 12) 查询学生的姓名和出生年份(今年2003年) 13) 查询没有成绩的学生学号和课程号 14) 查询总成绩大于200分的学生学号 15) 查询每门课程不及格学生人数 16) 查询不及格课程超过3门的学生学号 17) 查询年龄在10到19岁之间的学生信息 18) 查询全体学生情况,按所在系升序排列,同一个系的学生按年龄降序排列 19) 查询选了1号课程的学生平均成绩 20) 查询选了3号课程的学生的最高分 21) 查询每个同学的总成绩 实验三 SQL进行复杂查询 一、实验目的: 1. 熟练掌握各种连接查询及其连接条件。 2. 掌握各种嵌套查询的使用。 3. 掌握复杂的集合查询。 二、内容和主要步骤: 1.实验一中的数据为基础 2.对各表中的数据进行不同条件的连接查询和嵌套查询; 1) 查询每个学生及其选课情况; 2) 查询每门课的间接先修课 3) 将STUDENT,SC进行右连接 4) 查询有不及格的学生姓名和所在系 5) 查询所有成绩为优秀(大于90分)的学生姓名 6) 查询既选修了2号课程又选修了3号课程的学生姓名、学号; 7) 查询和刘晨同一年龄的学生 8) 选修了课程名为“数据库”的学生姓名和年龄 9) 查询其他系比IS系任一学生年龄小的学生名单 10) 查询其他系中比IS系所有学生年龄都小的学生名单 11) 查询选修了全部课程的学生姓名 12) 查询计算机系学生及其性别是男的学生 13) 查询选修课程1的学生集合和选修2号课程学生集合的差集 14) 查询李丽同学不学的课程的课程号 15) 查询选修了3号课程的学生平均年龄 16) 求每门课程学生的平均成绩 17) 统计每门课程的学生选修人数(超过3人的才统计)。要求输出课程号和选修人数,结果按人数降序排列,若人数相同,按课程号升序排列 18) 查询学号比刘晨大,而年龄比他小的学生姓名。 19) 求年龄大于女同学平均年龄的男同学姓名和年龄 20) 求年龄大于所有女同学年龄的男同学姓名和年龄 21) 查询至少选修了95002选修的全部课程的学生号码 22) 查询95001和95002两个学生都选修的课程的信息 实验四 SQL的常用数据更新操作 一、实验目的: 1. 熟练掌握SQL的常用数据更新操作。 2. 熟练应用INSERT,UPDATE,DELETE语句。 3. 掌握更新操作的各种格式。 二、实验内容和主要步骤 1. 应用INSERT,UPDATE,DELETE语句进行更新操作; 1) 插入如下学生记录(学号:95030,姓名:李莉,年龄:18) 2) 插入如下选课记录(95030,1) 3) 计算机系学生年龄改成20 4) 数学系所有学生成绩改成0 5) 把低于总平均成绩的女同学成绩提高5分 6) 修改2号课程的成绩,若成绩小于75分提高5%,成绩大于75时提高 7) 4%(两个语句实现,注意顺序) 8) 删除95030学生信息 9) 删除SC表中无成绩的记录 10) 删除张娜的选课记录 11) 删除数学系所有学生选课记录 12) 删除不及格的学生选课记录 13) 查询每一门课程成绩都大于等于80分的学生学号、姓名和性别,把值送往另一个已经存在的基本表STU(SNO,SNAME,SSEX)中 14) 把所有学生学号和课程号连接追加到新表中 15) 所有学生年龄增1 16) 统计3门以上课程不及格的学生把相应的学生姓名、系别追加到另外一个表中 2.熟练掌握INSERT,UPDATE,DELETE语句并能综合应用;

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值