微机接口与原理期末整理
更新时间:2023-10-19 17:32:01 阅读量: 综合文库 文档下载
C#中连接数据库的添加查找方法 using System.Data.SqlClient; namespace WindowsApplication3 { public partial class Form1 : Form { public Form1()
{ InitializeComponent();}
private void button1_Click(object sender, EventArgs e)//添加按钮
{ SqlConnection conn = new SqlConnection(\连接对象st是表的名称 int Sex = 1;
if (radioButton2.Checked) Sex = 0;
String sqlString=String.Format(\ SqlCommand cmd = new SqlCommand(sqlString,conn);// try
{ conn.Open();//打开连接会出现异常 int row= cmd.ExecuteNonQuery(); if (row == 0)
MessageBox.Show(\ else MessageBox.Show(\ }
catch ( Exception ex)
{ MessageBox.Show(ex.Message.ToString());//捕捉异常} finally
{ conn.Close();//只要出现异常就关闭连接} }
private void button2_Click(object sender, EventArgs e)//查找按钮
{ SqlConnection conn = new SqlConnection(\ string sqlString = \ SqlCommand cmd2 = new SqlCommand(sqlString,conn); conn.Open();
SqlDataReader sdr = cmd2.ExecuteReader(); if (sdr.HasRows) { sdr.Read();
textBox2.Text=sdr[\ textBox3.Text = sdr[\
if (bool.Parse(sdr[\转换成布尔类型判断 radioButton1.Checked = true; else radioButton2.Checked = true; // sdr.Close();}
else MessageBox.Show(\没有查询到该学生\ conn.Close(); } } } C#记事本部分代码 namespace _2 {public partial class Form1 : Form {public Form1()
{InitializeComponent();}
private void ntsmenu_Click(object sender, EventArgs e)
{richTextBox1.Clear();//新建}
private void opsmenu_Click(object sender, EventArgs e)
{ if (openFileDialog1.ShowDialog() == DialogResult.OK && openFileDialog1.FileName != \ {richTextBox1.LoadFile(openFileDialog1.FileName, RichTextBoxStreamType.PlainText);//打开} }
private void stsmenu_Click(object sender, EventArgs e)
{if (saveFileDialog1.ShowDialog() == DialogResult.OK && saveFileDialog1.FileName != \
{ richTextBox1.SaveFile(saveFileDialog1.FileName, RichTextBoxStreamType.PlainText);//保存} }
private void atsmennu_Click(object sender, EventArgs e)
{ if (saveFileDialog1.ShowDialog() == DialogResult.OK && saveFileDialog1.FileName != \
{ richTextBox1.SaveFile(saveFileDialog1.FileName, RichTextBoxStreamType.PlainText);//另保存} }
private void xtsmenu_Click(object sender, EventArgs e)
{ this.Close();//退出}
private void utsmenu_Click(object sender, EventArgs e) { //撤销 richTextBox1.Undo();}
private void rtsmenu_Click(object sender, EventArgs e)
{ //重复 }
private void ttsmenu_Click(object sender, EventArgs e) { //剪切richTextBox1.Cut();}
private void ctsmenu_Click(object sender, EventArgs e) { richTextBox1.Copy();//复制}
private void ptsmitem_Click(object sender, EventArgs e) { ////粘帖richTextBox1.Paste(); }
private void atsmenu_Click(object sender, EventArgs e) { //全选richTextBox1.SelectAll(); }
private void tsmbady_Click(object sender, EventArgs e) { //字体设置
fontDialog1.ShowColor = true;
if(fontDialog1.ShowDialog()==DialogResult.OK){ richTextBox1.Font = fontDialog1.Font;
richTextBox1.ForeColor = fontDialog1.Color; } }
private void tsmauto_Click(object sender, EventArgs e) { //自动换行richTextBox1.WordWrap = false; } private void time_Click(object sender, EventArgs e)
{ richTextBox1.AppendText(DateTime.Now.ToLocalTime().ToString());//显示日期时间 richTextBox1.AppendText(DateTime.Now.DayOfWeek.ToString());//显示星期 } } } 教务管理系统 namespace 管理系统 { class Program
{ static void Main(string[] args)
{ Hashtable ht = new Hashtable (); string key;string val;
Console.WriteLine(\欢迎使用2009级学生管理系统\
Console.WriteLine(\ Console.WriteLine(\请选择如下操作:\
Console.WriteLine(\添加 B:查询 C:删除 D:修改 E:退出系统\ Console.WriteLine(\ string r = Console.ReadLine(); while (r!=\ { switch (r)
{ case \请输入学生学号:\
key= Console .ReadLine ();Console .Write (\请输入学生姓名:\ val=Console .ReadLine ();ht.Add (key,val);break;
case \请输入要查询的学号:\ key= Console .ReadLine (); if(ht.Contains(key))
Console .WriteLine (\学生姓名为:{0}\ else Console.WriteLine(\您输入的学生学号不存在\ break;
case \请输入要删除的学号:\ key= Console .ReadLine ();ht.Remove(key); break;
case \请输入要修改的学号:\ key= Console .ReadLine ();
Console .WriteLine (\请输入修改后学生姓名:\ ht[key] = Console.ReadLine(); break;}
Console.WriteLine(\请选择如下操作:\
Console.WriteLine(\添加 B:查询 C:删除 D:修改 E:退出系统\ Console.WriteLine(\ r = Console.ReadLine();
}}}} 分割连接 namespace SplitJoinExample { ///
/// 此示例演示使用Split()和Join()方法分割和连接字符串 /// class Program
{ static void Main(string[] args)
{ string inputString; // 输入的字符串
string[] splitStrings; // 分割后的字符串数组 string joinString; // 连接后的新字符串 // 输入提示
Console.WriteLine(\请输入一串字符串,用空格分隔单词:\ inputString = Console.ReadLine();// 接收输入
splitStrings = inputString.Split(' '); // 以空格作为分隔符分割字符串 // 将分割后的字符串输出
Console.WriteLine(\分割后的字符串为:\ foreach (string s in splitStrings) { Console.WriteLine(s);}
// 将分割后的字符串使用下划线连接在一起 joinString = string.Join(\ // 将连接后的字符串输出
Console.WriteLine(\连接后的新字符串为:{0}\ Console.ReadLine();}}} BinarySerch方法反回其中的元素5的下标 //给定8个数,存在数组中,利用Array类的BinarySerch方法反回其中的元素5的下标 namespace ConsoleApplication5 {class Program
{static void Main(string[] args) {int[] myArr ={8,7,6,5,4,3,2,1}; Array.Sort(myArr); int target = 5;
int result = Array.BinarySearch(myArr, target); Console.WriteLine(\的下标为{1}\ Console.ReadLine(); } }} sort方法排序 //给定8个数,将这些数存在数组中,利用Array类的Sort方法按从小到达顺序输出 namespace ConsoleApplication4 {class Program
{static void Main(string[] args)
{ int[] array = new int[] {8,7,6,5,4,3,2,1}; Console.WriteLine(\原始数组:\ for (int i = 0; i < array.Length; i++) Console.Write(\ Console.WriteLine();//换行 Array.Sort(array);
Console.WriteLine(\排序后的数组:\ for (int i = 0; i < array.Length; i++)
Console.Write(\冒泡排序法升序排列 //给定数组:,要求用冒泡排序法将其升序排列 namespace ConsoleApplication7 {class Program
{static void Main(string[] args)
{int[] SortArray = new int[] {78,89,90,56,79,345,217,5,13,88};
Console.WriteLine(\待排序序列:\ for (int i = 0; i < SortArray.Length; i++) Console.Write(\ \ Console.WriteLine();
for(int i=SortArray.Length-1;i>=0;i--) for (int j = 0; j < i; j++)
{if (SortArray[j] > SortArray[j + 1]) {int temp = SortArray[j];
SortArray[j] = SortArray[j + 1]; SortArray[j + 1] = temp;}} Console.WriteLine(\排序后序列:\ for (int i = 0; i < SortArray.Length; i++)
Console.Write(\ \ } }} 排序 //给定8个数:87654321将这些数存在数组中,按从小到大输出 namespace ConsoleApplication3 {class Program
{static void Main(string[] args) { int i, j, temp, m;
int[] array = new int[] {8,7,6,5,4,3,2,1}; for (j = 0; j < array.Length; j++) { temp = j;
for (j = 0; j < array.Length; i++) { if (array[i] < array[temp]) temp = i;} if (temp != j)
{ m = array[j];
array[j] = array[temp]; array[temp] = m;}
}
Console.WriteLine(\
for (j = 0; j < array.Length; j++)
Console.WriteLine(\ \ }}} 判断数组中是否含赵六 namespace ConsoleApplication6 {class Program
{static void Main(string[] args)
{ string[] arrSname ={\大宝\张三\李四\赵六\赵二\麻子\ //判断是否含某值
string target = \赵六\
bool result = ((System.Collections.IList)arrSname).Contains(target); Console.WriteLine(\包含{0}?{1}\ }}} time类的构造函数及其重载 namespace ConsoleApplication13 { class Time
{ public int nHour, nMinute, nSecond; public Time()//构造函数
{ nHour = nMinute = nSecond = 0;} public Time(int Hour) { nHour = Hour;
nMinute = nSecond = 0;}
public Time(int Hour, int Minute)//重载2 { nHour = Hour;
nMinute = Minute; nSecond = 0;}
public Time(int Hour, int Minute, int Second)//重载3 { nHour = Hour; nMinute = Minute; nSecond = Second;}} class Text//程序入口 { static void Main() { Time t1,t2,t3,t4; t1 = new Time();
t2 = new Time(10); t3 = new Time(10,20); t4 = new Time(10,20,30);
Console.WriteLine(\时间为:{0}时{1}分钟{2}秒\ Console.WriteLine(\时间为:{0}时{1}分钟{2}秒\ Console.WriteLine(\时间为:{0}时{1}分钟{2}秒\ Console.WriteLine(\时间为:{0}时{1}分钟{2}秒\创建类 namespace ConsoleApplication11 { //学生类
public class student
{ public string strName; public int nAge;
public void SetAge(int age) { this.nAge = age; }
public int GetAge() { return this.nAge; } }
class Program
{ static void Main(string[] args) { student s = new student(); s.SetAge(20);//赋值
Console.WriteLine(s.GetAge());//获取 } }} 方法重载 namespace ConsoleApplication1 { public class Student
{ public string strName; public int nAge; //长了一岁
public void Grow() { this.nAge++; }
//长age岁
public void Grow(int age) { this.nAge+=age; }
class Program
{ static void Main(string[] args) { Student s=new Student(); s.strName=\张三\ s.nAge=20; s.Grow();
Console.WriteLine(s.nAge); s.Grow(2);
Console.WriteLine(s.nAge); } }} 类的继承 namespace ConsoleApplication12 { //学生类
public class Student
{ public string strName; public int nAge; }
public class CollegeStudent:Student { public string xi; }
public class Program
{ static void Main(string[] args) { Student s = new Student(); s.strName = \小明\ s.nAge = 18;
Console.WriteLine(\姓名:{0},年龄:{1}\ CollegeStudent c = new CollegeStudent(); c.strName = \孙立娟\
c.nAge = 22;
c.xi = \信息学院\
Console.WriteLine(\姓名:{0},年龄:{1},所在系:{2}\ Console.ReadKey();} }}
//计算圆的面积 using System; namespace ConsoleApplication3 { class Circle
{ static void Main()
{ const double PI = 3.14159; double R, S;
Console.WriteLine(\请输入圆的半径\ R = double.Parse(Console.ReadLine()); S = PI * R * R;
Console.WriteLine(\圆的面积是:{0},S\} //用do while 计算100以内奇数的和 using System; class Program
{ static void Main(string[] args) { int i = 1, Oddsum = 0; do
{ Oddsum += i; i+=2; } while(i<=100);
Console.WriteLine(\到100的奇数和是:{0}\
} } //用do while 计算100以内奇数的和 using System; class Program
{ static void Main(string[] args) { int i = 1, Oddsum = 0; do
{ Oddsum += i; i+=2; } while(i<=100);
Console.WriteLine(\到100的奇数和是:{0}\ } } //判读成绩是否及格 using System; class TextScore
{ static void Main() { int InputScore;
string OutputScore;
Console.WriteLine(\请输入学生百分制分数:\ InputScore=conso if (Score >= 60) {
Console.WriteLine(\该成绩合格。\;
}
else { Console.WriteLine(\该成绩不合格。\ } }} //if-else求成绩等级 using System; class TextScore
{ static void Main() { int InputScore;
string OutputScore;
Console.WriteLine(\请输入学生百分制分数:\ InputScore=Convert.ToInt32(Console.ReadLine()); if (InputScore >= 70)
{ if (InputScore >= 80)
{ OutputScore = \优秀\ } else
{ OutputScore = \良好\ } } else
{ if (InputScore >= 60)
{ OutputScore = \及格\ } else
{ OutputScore = \不及格\ } }
Console.WriteLine(\百分制下{0}分经转换,为5分制下的{1}\ //For循环求奇数和 using System; class OddSum
{ public static int Odd() { int OddSum = 0;
for (int i = 1; i <= 100; i += 2) { OddSum += i; }
Console.WriteLine(\到100奇数和为:{0}\,OddSum); return 0; }
static void Main(string[] args) { Odd(); }} //switch成绩等级 using System; class Program
{ static void Main() { int InputScore;
string OutputScore;
Console.WriteLine(\请输入百分制分数:\
InputScore = Convert.ToInt32(Console.ReadLine()); int temp = InputScore / 10; switch (temp) { case 10:
OutputScore = \优秀\ break; case 9:
OutputScore = \优秀\ break; case 8:
OutputScore = \良好\ break; case 7:
OutputScore = \中等\ break; case 6:
OutputScore = \及格\ break; default:
OutputScore = \不及格\ }
Console.WriteLine(\百分制下{0}分经转换,为5分制下的{1}\ }} //foreach计算奇偶个数 using System; class Program
{ static void Main(string[] args) { int OddNum=0,EvenNum=0;
int[] arrNum=new int[]{1,5,15,11,12}; foreach(int k arrNum) { if(k%2==0)
EvenNum++; else
OddNum++; }
Console.WriteLine(\偶数个数为:{0},奇数个数为{1}\ } }
//输出1-12月分天数,判断是否为瑞年 using System; class CountDaysNumber
{ static void Main(string[] args)
{ Console.WriteLine(\输入月份:\ int i=int.Parse(Console.ReadLine()); switch (i) { case 1: case 3: case 5: case 7: case 8: case 10: case 12:
Console.WriteLine(\月有31天\ break;
case 2:
Console.WriteLine(\月需要输入年份:\ int year=int.Parse(Console.ReadLine());
if(year%4==0&&year0=!0||year@0==0)
Console.WriteLine(\年的{1}月有29天\ else
Console.WriteLine(\年的{1}月有28天\ break; } } } } //给定8个数,存在数组中,利用Array类的BinarySerch方法反回其中的元素5的下标 using System; class Program
{ static void Main(string[] args) { int[] myArr ={8,7,6,5,4,3,2,1}; Array.Sort(myArr); int target = 5;
int result = Array.BinarySearch(myArr, target); Console.WriteLine(\的下标为{1}\ Console.ReadLine(); }} //给定8个数:87654321将这些数存在数组中,按从小到大输出 using System; class Program
{ static void Main(string[] args) { int i, j, temp, m;
int[] array = new int[] {8,7,6,5,4,3,2,1}; for (j = 0; j < array.Length; j++) { temp = j;
for (j = 0; j < array.Length; i++) { if (array[i] < array[temp]) temp = i; }
if (temp != j)
{ m = array[j];
array[j] = array[temp]; array[temp] = m; } }
Console.WriteLine(\
for (j = 0; j < array.Length; j++)
Console.WriteLine(\ \ } } //给定8个数,将这些数存在数组中,利用Array类的Sort方法按从小到达顺序输出 using System;
namespace ConsoleApplication4 { class Program
{ static void Main(string[] args)
{ int[] array = new int[] {8,7,6,5,4,3,2,1}; Console.WriteLine(\原始数组:\ for (int i = 0; i < array.Length; i++) Console.Write(\ Console.WriteLine();//换行 Array.Sort(array);
Console.WriteLine(\排序后的数组:\ for (int i = 0; i < array.Length; i++)
Console.Write(\ } } } //给定数组:,要求用冒泡排序法将其升序排列 using System; class Program
{ static void Main(string[] args)
{ int[] SortArray = new int[] {78,89,90,56,79,345,217,5,13,88}; Console.WriteLine(\待排序序列:\ for (int i = 0; i < SortArray.Length; i++) Console.Write(\ \ Console.WriteLine();
for(int i=SortArray.Length-1;i>=0;i--) for (int j = 0; j < i; j++) {
if (SortArray[j] > SortArray[j + 1]) {
int temp = SortArray[j];
SortArray[j] = SortArray[j + 1]; SortArray[j + 1] = temp; } }
Console.WriteLine(\排序后序列:\ for (int i = 0; i < SortArray.Length; i++) Console.Write(\ \
实验一8255
CODE SEGMENT
ASSUME CS:CODE
IOCONPT EQU 0063H ;8255的控制口 IOCPT EQU 0061H ;8255的B口
START: MOV AL,80H ;8255设置为方式0,A口、B口、C口输出 MOV DX,IOCONPT ;8255的控制口
OUT DX,AL ;8255的控制字写入控制口 NOP NOP
NOP ;延时,等待控制字写入 IOLED1: MOV DX,IOCPT ;8255的B口 IODE2: MOV AL,01H
OUT DX,AL ;8255的PB0输出1,继电器吸合 CALL DELAY ;延时, MOV AL,00H
OUT DX,AL ;8255的PB0输出0,继电器断开 CALL DELAY ;延时 JMP IODE2 ;循环重复 ;延时子程序
DELAY: MOV CX,0FFFFH DELY: LOOP DELY RET
CODE ENDS
END START 实验二8255A可编程并行接口 CODE SEGMENT
ASSUME CS:CODE
IOCONPT EQU 0073H ;8255的控制口 IOCPT EQU 0072H ;8255的C口 IOBPT EQU 0071H ;8255的B口
START:
MOV AL,89H ;8255设置为方式0,C口输入,B口输出 MOV DX,IOCONPT ;设置8255的控制口地址 OUT DX,AL ;8255的控制字写入控制口 NOP NOP
NOP ;延时,等待控制字写入
IOLED1: MOV DX,IOCPT ;设置8255的C口地址
IN AL,DX ;读入8255的C口的值(开关的状态) MOV DX,IOBPT ;设置8255的B口地址
OUT DX,AL ;输出到8255的B口,使LED灯亮或者灭 JMP IOLED1 ;循环 CODE ENDS
END START 实验三8253
CODE SEGMENT
ASSUME CS:CODE
TCONTRO EQU 004BH ;8253的控制口 TCON2 EQU 004AH ;8253的通道2 TCON0 EQU 0048H ;8253的通道0 START:;通道2的初始化
MOV DX,TCONTRO ;设置8253的控制口地址
MOV AL,0B6H ;8253的通道2,方式3,二进制计数 OUT DX,AL ;写入8253的控制字 MOV DX,TCON2 MOV AX,1000 OUT DX,AL MOV AL,AH OUT DX,AL ;通道0的初始化
MOV DX,TCONTRO
MOV AL,00110110B ;8253的通道0,方式3,二进制计数 OUT DX,AL
MOV DX,TCON0 MOV AX,1000 OUT DX,AL MOV AL,AH OUT DX,AL HLT
CODE ENDS
END START Hello world 程序代码 data segment msg db 'hello world$' data ends code segment assume cs:code,ds:data start:mov ax,data mov ds,ax lea dx,msg mov ah,09h int 21h mov ah,4ch int 21h code ends end start
填空题 选择题 (1) 一个字节等于 个二进制位。 (1) 下列数据中,有可能是八进制数的是 。
A. 488 B. 317 C. 597 D. 189 (2) 1 KB等于 字节。
(2)将十进制数123转换为等值的二进制数是 。
题目:已知公司 员工表EMP(EID, ENAME, BDATE, SEX, CITY)
部门表DEPT(DID, DNAME, DCITY),
工作表WORK(EID,DID,hiredate,SALARY)
各个字段说明如下:
EID—员工编号,最多6个字符(主键)
ENAME—姓名,最多10个字符。 BDATE——出生日期,日期型 SEX——员工性别,单个字符。取值为F或者M CITY——员工居住的城市,最多20个字符。 DID—部门编号,最多3个字符(主键) DNAME—部门名称,最多20个字符
DCITY—部门所在的城市,最多20个字符。
HIREDATE——雇佣日期,日期型 SALARY——工资。整型。 写出相应的sql语句:
1、 创建表EMP,DEPT,WORK,并定义相应的约束(主要是主键,外键和检查约束)。 2、
2、 查询年龄为45,48的员工的姓名和居住城市
3、 查询所有男员工的基本信息
4、 列出员工编号以字母P至R开头的所有员工的基本信息
5、 查询除20号部门外的其他部门的平均工资,列出平均工资高于2000的部门号
6、 查看工资少于2200的员工的总数
7、 给emp表新增两列hiredate 和salary,类型同上边的说明。
8、 显示所有女员工的姓名、出生日期和居住城市,按出生日期的降序排序,若出生日期相同则按姓名排序?
设有一个数据库,包括如下关系模式:
部门(部门编号 C(3),部门名称 C(8),办公地点 C(8),部门电话C(8))
教工(教工编号 C(3),部门编号 C(3),姓名 C(6),性别 C(1),出生日期 D( ),职称 C(6),文化程度 C(6),婚否 C(1),基本工资 N(7,2),家庭电话 C(8))
任课(教工编号 C(3),课程编号 C(4),上课班级 C(8)),上课时间 D( ),上课地点 C(8))) 课程(课程编号 C(4),课程名称 C(10),学分 N(5,1))
(1) 在“课程”表中插入一条记录(课程号:A256,课程名称:高等数学,学分:4.5)。
(2) 查询所有文化程度为硕士的女教工的教工编号、姓名、出生日期,并按出生日期升序排列。
(3) 查询计算学校教工总人数。
(4) 将部门名称“计算机系”修改为“计算机学院”。
(5) 把查询和删除“课程”表数据的权限授给用户 U2。
(6)创建一个所有教师任课信息的名为“teach”的视图,包含下列属性:姓名、课程名称、上课班级、上课时间、上课地点。
(7) 查询各位教师任课门数,输出:教师编号、教师名称、任课门数。
(8) 查询所有女教工的姓名、家庭电话。
(9) 查询部门名称为“外语系”的所有女教师的姓名和家庭电话。
(10) 查询教工编号为“126”的教师的任课情况,要求输出:姓名、课程名称、上课时间、上课地点。 (11) 输出课程表的第5-9条记录。
14周练习
1. 选择题
1) 下列哪些语句是正确的?
A. Select * from students where marks > avg(marks);
B. Select * from students order by marks where subject =’SQL’; C. Select name from students group by subject , name; D. Select group(*) from students;
2) 一个公司有以下部门,Marketing,Desiging,Production,Packing下列语句执行结果是什么? Select * fron dept_tbl where depatment <=’Marketing’;
A.返回“Designing,Marketing” B.返回“Designing” C.返回“Marketing” D.字符串不能用<=操作符
E.返回“Desiging,Production,Packing” 3)下列语句 SELECT name FROM Student WHERE name LIKE ‘_a%’; 那些name会被显示?
A.以“a”开头的
B.以“a”为第二个字母的 C.以“a”为倒数第二个字母的 D.所有包含“a”的
4)下列哪些可以作为字段名? A. EmpNo B. 25Block C. -AccountID D. Customer.Name 5) 下列哪些函数可以用来提取字符串的一部分? A. TRUNC B. SUBSTR C. INSTR D. LENGTH
2. 填空题
① 数据库中对一个事务进行提交用的命令是__Commit___,回滚事务的命令是_rollback_
② 写出在数据表上建立索引的完整语法 Create index 索引名 on 表名(列名1,列名2?)
3. 简答题
1. 数据类型中char和varchar2都是字符类型,两者的区别是? 答:Char 是定长的字符串类型;Varchar 是可变长的的字符串类型。 2. DELETE 和 TRUNCATE 的异同点 答:相同点:都是用于删除数据;
不同点:Delete 是用来从表中删除一行或多行数据;truncate 在Oracle中用于全表删除。 视图的作用,及怎么创建视图
答:试图作用:
(1) 帮助没有作业经验的用户执行复杂的SQL查询。 (2) 限制用户访问敏感数据。
创建视图语法: Create view 视图名 as select 查询语句; 3. 有如下表记录:
ID Name EmailAddress LastLogon
100 test4 test4@yahoo.cn 2007-11-25 16:31:26 13 test1 test1@yahoo.cn 2007-3-22 16:27:07 19 test1 test1@yahoo.cn 2007-10-25 14:13:46 42 test1 test1@yahoo.cn 2007-11-20 14:20:10 45 test2 test2@yahoo.cn 2007-4-25 14:17:39 49 test2 test2@yahoo.cn 2007-5-25 14:22:36
用一句sql查询出每个用户最近一次登录的记录(每个用户只显示一条最近登录的记录)
5. 如下
T表:(字段:ID,NAME,ADDRESS,PHONE,LOGDATE) E表:(字段:NAME,ADDRESS,PHONE)
A 将表T中的字段LOGDATE中为2001-02-11的数据更新为2003-01-01,请写出相应的SQL语句。(该字段类型为日期类型)
B 请写出删除T表中NAME存在重复的记录,只保留一条 C 请写出将T表中的保存E表(空表)中的SQL语句
D 请写出将T表中第3~5行数据列出来的SQL语句
4. 问答题
数据库中有两个表格的构造如下: CLASS_TBL C_NO(NO) C_NAME(种类) GOODS_TBL GS_NO(NO) GS_NAME(名称) C_NO GS_PRICE(价格) GS_ AMOUNT(数量) C_NO 1 2 3
C_NAME 白酒 红酒 黄酒
CHAR(1) VARCHAR(20) CHAR(3) VARCHAR(20) CHAR(1) INT(8) INT(8)
GS_NO 101 102 103 201 202 203 204
NOT NULL NOT NULL
NOT NULL NOT NULL NOT NULL NULL NULL GS_NAME 五粮液 贵州茅台 山西汾酒 王朝干白 法国红 通化红喜 北京天坛 C_NO 1 1 1 2 2 2 2 类别表 PK 在库明细表 PK FK=CLASS_TBL.C_NO GS_PRICE 300 500 100 30 50 20 15 GS_ AMOUNT 50 40 80 200 100 200 500 假定CLASS_TBL和GOODS_TBL 数据如下:
1。写出建立CLASS_TBL表格的SQL语句(不包含PK)。 2。为已生成的CLASS_TBL表格追加建立PK。
。写出建立GOODS_TBL表格的SQL语句(包含PK(主键)和FK(参照键))。 3。请判断以下SQL语句的对错(逻辑错误或编译错误),错的给出理由。
(1)SELECT C_NAME FROM CLASS_TBL WHERE C_NO = (SELECT C_NO FROM GOODS_TBL WHERE GS_AMOUNT = 200);
(2)SELECT GS_NAME FROM GOODS_TBL ORDER BY GS_AMOUNT; (3)INTSERT INTO GOODS_TBL (GS_NO, C_NO) VALUES (104, 2);
(4)SELECT GS_NAME FROM GOODS_TBL WHERE GS_PRICE <> NULL; (5)SELECT GS_NO + GS_NAME FROM GOODS_TBL; 4。请写出以下SQL语句的执行结果:
SELECT GS_NAME FROM GOODS_TBL WHERE GS_PRICE > 30 AND GS_PRICE < 100
5。假定GS_NO为204的品种被售出100瓶,请写出更新语句。
6。写出一条SELECT语句列出单价小于25元的类名为”红酒”的所有库存的名称、单价、数量和在库价值,并按单价降序。
7。按C_NO别统计各大类的总金额,写出一条SELECT语句,使输出结果如下:
白酒 43000
红酒 22500 黄酒 0
8。使用EXISTS改写以下SQL语句。
SELECT C_NAME FROM CLASS_TBL
WHERE C_NO NOT IN (SELECT C_NO FROM GOODS_TBL WHERE GS_AMOUNT < 80)
9。如果想将两表中C_NO的所有1改为0,按操作两表的次序写出所有SQL语句(注意,不得卸下FK)。
10。请把库存表中所有信息表示出来,同时用以下形式表示
400以上:库存积压, 100以下:库存不足 其他:库存适中
一、选择题(每小题3分,共计21分)
1、Dept表及一些行如下所示(department为主码),请选择正确的SQL语句。
DEPARTMENT 20 10 NAME Sales Marketing LOCATION Miami New york BUDGET 1700000 2000000 A insert into dept values(10, ‘research', ‘new york',1500000) B insert into dept values(null, ‘accounting', ‘Atlanta',1200000) C insert into dept values(15, ‘computing', ‘Miami',1500000)
2. 假设下表中属性emp_dept是employee表中的一个外码,其中department表是主表,ID为主码,employee表为从表。请指出下面给出的各行中哪一行不能插入employee表 DEPARTMENT:
ID 10 40 EMPLOYEE:
EMP_ID 1234 4567
EMP_NAME Green Gilmore EMP_MGR 1234 TITLE President Senior VP EMP_DEPT 40 40 NAME Accounting Sales LOCATION New york miami 1045 9876 Rose Smith 4567 1045 Director Accountant 10 10 A 9213 jones 1045 clerk 30 B 8997 grace 1234 secretary 40 C 5932 allen 4567 clerk null
3.下面哪一个like命令会返回名字象HOTKA的行?
A where ename like ?_HOT%'B where ename like ?H_T%' C where ename like ?%TKA_'D where ename like ?%TOK%'
4. 若从表中删除了1700行,要保存数据库中的改变,有下列哪个语句?( ) A.savepoint B.commit C.rollback D.set transaction 5. 执行以下语句出错的行是:( ) select deptno,dname,ename,sal from emp,dept
where emp.deptno=dept.deptno and sal>1000;
A. 第一行 B.第二行 C.第三行 D.第四行 6、当一个用户修改了表的数据,那么( ) A.第二个用户立即能够看到数据的变化
B.第二个用户必须执行rollback命令后才能看到数据的变化 C.第二个用户必须执行commit命令后才能看到数据的变化 D.第二个用户因为会话不同,暂时不能看到数据的变化 7、以下 不是oracle数据库对象。
A、表 B、视图 C、变量 D、索引 二、填空题(每空3分,共计15分)
1在SQL SELECT语句查询中,要去掉查询结果中的重复记录,应该使用_________关键字。 2.SQL的含义是_____________。
3.SYS用户和system用户的默认口令分别是_________、_________。 4、执行立即关闭的命令是_________。
三、判断题(正确为√,错误为×,每小题2分,共计14分)
1、Order by子句仅对检索数据的显示有影响,并不改变表中行的内部顺序。() 2、从一个表中删除元组时,delete和drop table命令可以起到同样的效果。() 3、与主键不同,惟一键可以是null值。()
4、Delete可以有选择地删除记录,使用rollback语句可以取消这个命令的执行。() 5、Create table as select能够创建一个复制表对象。()
6、我们使用alter table命令的add选项向一个已存在的表中添加一个新的属性列时,新列的每一行最初的值均为null。只有当一个表还没有行的时候,我们才可以对添加的列用not null约束。() 7、使用having子句是为了限制group by子句返回的行的个数。()
四、综合题 (共计50分)
(一)设关系模式SCG(S#, C#, grade)中S#为学生号,C#为课程号,grade为某学生学某号课程的考试成绩。今要查询平均分数超过80分的课程的平均成绩,且要求查询的结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列。写出SQL查询。(15分)
(二)设有一个顾客商品关系数据库,有三个基本表,表结构如下: 商品表:Article (商品号,商品名,单价,库存量)
客户表:Customer (顾客号,顾客名,性别,年龄,电话) 订单表:OrderItem (顾客号,商品号,数量,购买价,日期)
注意:回答时要将答案写到规定的地方;给出的答案要求字迹必须清楚;不允许改变程序结构和随意添加子查询。
1.请用SQL语言创建一个视图GM_VIEW,检索顾客的顾客号、顾客名和订购商品的商品名、金额和日期。(金额等于数量*购买价)(15分)
CREAT VIEW GM_VIEW(顾客号,顾客名,商品名,金额,日期) AS SELECT ___________
FROM Artcle, Customer, OrderItem WHERE ___________;
2.请用SQL语言找出女顾客购买的商品号、商品名和数量合计。(15分) SELECT ___________
FROM OrderItem, Artcle, Customer, WHERE ___________
GROUP BY OrderItem.商品号,商品名;
3.请用SQL语言ALTER TABEL命令给商品表Article增加一个字段,字段名为:产地,数据类型为:CHAR,长度为:30,命令如下:(5分)
ALTER TABEL ___________
连接查询: 1、等值连接
显示员工的姓名和所在部门的名称
select from a inner join b on 连接条件
select emp.deptno,emp.ename,dept.dname from emp inner join dept on emp.dept=dept.deptno where emp.deptno in(20,30); select emp.deptno,emp.ename,dept.dname from emp,dept where emp.dept=dept.deptno and emp.deptno in(20,30); 查询以M开头的所有员工的姓名、工龄和工作所在地。
select e.ename,to_char(sysdate,'yyyy')-to_char(e.hiredate,'yyyy) 工龄,d.loc from emp e inner join dept d on e.deptno=d.deptno where e.ename like 'M%';
2、自连接 查询每一个员工的经理的姓名
select a.ename,b.ename from emp ,emp b where a.empno=b.mgr; 3、不等连接 查询工资为第三等级的员工的姓名和工资 select ename,sal from emp,salgrade where grade=3 and sal between losal and hisal;
4、外连接 (基表和匹配表,基表中的数据要全部输出,而匹配表只输出与基表相匹配的数据,没有相匹配的记录时,对应字段输出空值。)(+)永远出现在缺少信息的表的后边 (+) outer join (1) 左外连接
1 输出dept表所有部门的员工的姓名和工号
select dept.deptno,ename,empno from dept ,emp where dept.deptno=emp.deptno(+);
select dept.deptno,ename,empno from dept left outer join emp on dept.deptno=emp.deptno; (2) 右外连接
where emp.deptno(+)=dept.deptno
left outer join right outer join full outer join DQL SELECT
SELECT FROM WHERE GROUP BY HAVING ORDER BY; SELECT 列别名:a 空格b a as b
只能出现在select子句和order by子句。 distinct a,b
分组函数:count,sum,avg,max,min count(*)不忽略空值,分组函数一定不要出现在where子句,只能出现在select,having,order by。round(x) to_char(a,b) sysdate(),months_between(a,b) add_months(a,b) add_months(sysdate,-1) 表的别名
where not and or > < >= != <> in like _ % \\_ escape \\ is null is not null group by
select a,b,count(c) from table1 group by a,b order by a,b,c asc desc 连接查询 子查询 DDL
table p c u f not null default
数据类型 number(p,s),char varchar2 nchar ,date date'yyyy-mm-dd' ,int blob clob 120G Student (id number(12) primary key,
m_id number(12) references student(id)) create table table_name();
create table table_name as 子查询; create temporary table table_name; index view sequence user DCL
commit rollback grant revoke DML insert update delete
insert into table_name() values();
insert into table_name select()union select(); insert into table_name 子查询;
update table_name set where; 输出的格式化:
set linesize n //一行显示多少个字符 set pagesize n // 一页显示多少行
col column_name option( format,heading,jus(left,right,center) set heading on|off //查询结果要不要列名 show all if then else
deptno 10 财务处 20 研究部门 30 销售部 40 指挥部
其它 该部门不存在 decode(a,b,c,d)
select deptno,decode(deptno,10,'财务处',
20,'研究部门, 30,'销售部',
40,'指挥部','该部门不存在') from dept; case函数的用法 case expression
when 值 then expression when 值 then expression else expression end
select deptno, case deptno
when 10 then '财务处' when 20 then '研究部门' when 30 then '销售部' when 40 then '指挥部' else '该部门不存在' end from dept;
case
when expression then expression when expression then expression else expression
end
select deptno, case
when deptno=10 then '财务处' when deptno=20 then '研究部门' when deptno=30 then '销售部' when deptno=40 then '指挥部' else '该部门不存在' end from dept;
查询每个员工的月收入,当月输入超过3000,显示“高收入”,否则显示“一般收入“。 decode(1,1,2,3) 2 decode(1,2,2,3) 3
子查询(一个select语句包含在其它的sql语句中。子查询可以出现在where,having,from子句中,用括号把子查询括起来) 注意:(1) 单行子查询的结果不能超过1
(2) 在子查询中不能使用order by子句 (3) 子查询不能作为函数的参数出现 (4) 子查询允许嵌套,最多可以255层
1、单行子查询(子查询的结果是一行一列,这时可以使用所有的单值运算符来连接子查询= > < >= ) 查询比20号部门平均工资高的员工的信息。 select avg(sal) from emp where deptno=20;
select * from emp where sal>(select avg(sal) from emp where deptno=20); 把7566员工的工资改为7655员工的工资
update emp set sal=(select sal from emp where empno=7655) where empno=7566; 把7655员工的工资信息存储到表emp1中。
create table emp1 as select sal from emp where empno=7655; insert into emp1 select sal from emp where empno=7655;
2、多行子查询(子查询的查询结果是单列多行,这时可以使用的运算符为in,any,all,其中any,all通常与单值符结合使用) 查询与20号部门员工工资相同的职工信息
select * from emp where sal in(select sal from emp where deptno=20); 查询比20号部门任一员工工资高的职工信息
select * from emp where sal>any(select sal from emp where deptno=20); select * from emp where sal>(select min(sal) from emp where deptno=20); 查询比20号部门所有员工工资高的职工信息
select * from emp where sal>all(select sal from emp where deptno=20); select * from emp where sal>(select max(sal) from emp where deptno=20); >any >最小值 >all >最大值 =any in
3、多列子查询(一般使用in或者=)
找出与20号部门工资和奖金相同的员工的工号,工资和奖金
select empno,sal,comm from emp where sal in(select sal from emp where deptno=20) and nvl(comm,0) in(select nvl(comm,0) from emp where deptno=20);
select empno,sal,comm from emp where (sal,nvl(comm,0)) in(select sal,nvl(comm,0) from emp where deptno=20);
把7566员工的工资和奖金改为7655员工的工资和奖金
update emp set (sal,comm)=(select sal,comm from emp where empno=7655) where empno=7566; 4、相关子查询
显示emp表的第3条记录
显示emp表的第3-5条记录 minus union union all intersect rownum
select * from (select rownum row1,sal,empno,hiredate from emp) r where row1=3;
select * from (select rownum row1,sal,empno,hiredate from emp) r where row1 between 3 and 5; 输出emp表的第一条语句的工号和姓名
select empno,ename from emp where rownum=1; set serveroutput on declare
v_empno emp.empno%type; v_ename emp.ename%type; begin
select empno,ename into v_empno, v_ename from emp where rownum=1; dbms_output.put_line('第一条记录是:');
dbms_output.put_line(v_empno|| v_ename); end; /
procedure successfully completed
更新特定员工的工资,当工资小于2000时,加100,否则不更新,输出不需要加工资 declare
2 v_sal emp.sal%type;
3 v_empno emp.empno%type; 4 begin
5 v_empno:='&no';
6 select sal into v_sal from emp where empno=v_empno ;
7 if (v_sal>2000) then dbms_output.put_line('不需要加工资:'); 8 else update emp set sal=sal+100; 9 end if; 10 end; 11 /
计算1-100的和
子查询(一个查询的结果作为另一个sql的组成,一般用括号把子查询括起来,子查询可以出现在where、from ,having子句)
注意:1、单行子查询中子查询的结果不要超过一个 2、子查询中一定不要使用order by 3、子查询不可以作为函数的参数出现 4、子查询可以嵌套,最多可以到255层。
1、单行子查询 可以使用任意一个单值运算符 = >=
查询工资比20号部门工资的平均值高的员工的姓名和工资。
select ename,sal from emp where sal>(select avg(sal) from emp where deptno=20); 把7430员工的工资更新为员工7555的工资。
update emp set sal=(select sal from emp where empno=7555) where empno=7430; 把emp表中20,30号部门的员工信息存储到表emp1中; create table emp1 as select * from emp where deptno in(20,30); insert into emp1 select * from emp where deptno in(20,30); 2、多行子查询 in any all
显示工资与20号部门员工工资相同的员工的信息
select * from emp where sal in( select sal from emp where deptno=20); 显示工资比20号部门员工工资高的员工的信息
select * from emp where sal>any( select sal from emp where deptno=20); select * from emp where sal>(select min(sal) from emp where deptno=20); 显示工资比20号部门所有员工工资高的员工的信息
select * from emp where sal>all( select sal from emp where deptno=20); select * from emp where sal>(select max(sal) from emp where deptno=20); >any 大于最小值>all 大于最大 =any in =all (错误) 3、多列子查询
显示工资和奖金比smith高的员工的信息
select * from emp where (sal,nvl(comm,0))=(select sal,nvl(comm,0) from emp where ename='SMITH'); 把7430员工的工资和奖金更新为员工7555的工资和奖金。
update emp set (sal,comm)=(select sal,comm from emp where empno=7555) where empno=7430; 4、相关子查询
显示emp表的第3-5条记录
select * from (select rownum row1,empno,ename from emp) r where r.row1 between 3 and 5; 显示emp表的第3条记录 rownum 伪列 从1编码行号
select * from emp where rownum<=5 minus union union all intersect select * from emp where rownum<=2
正在阅读:
微机接口与原理期末整理10-19
酒与酒文化模板12-23
XX县2011年人口形势分析报告(求真务实强基础 锐意进取谋发展)2011.11.11修改版12-25
配电线路剪火、接火作业指导书07-21
微机原理试题04-18
2011-2012学年人教版小学五年级数学第一学期期末试卷05-01
书法欣赏 2018 公需课03-29
2014哈尔滨数学中考伴我行111-16
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 微机
- 期末
- 接口
- 原理
- 整理